WPF DataGrid Binding – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

WPF DataGrid Binding – .NET – Fórum – Programujte.comWPF DataGrid Binding – .NET – Fórum – Programujte.com

 

m4r100
Návštěvník
23. 7. 2013   #1
-
0
-

Zdravim,

potrebuji poradit. Mam univerzalni tabulku pro ruzna data. Data dostanu az za behu programu, takze tabulka musi sama automaticky generovat sloupce. Vsechno funguje do doby,  nez se pokusim zmenit Template nektereho sloupce. Nevim jak spravne nastavit Binding na sloupec v DataTable.

XAML tabulka:

 <DataGrid x:Name="mainDataGrid" ItemsSource="{Binding Data}" AutoGeneratingColumn="DataGrid_AutoGeneratingColumn" />  

C# kod:

public DataTable Data
{
    get { return data; }
    set 
    { 
        data = value;
        NotifyPropertyChanged("Data");
    }
}
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{

     if (e.PropertyType == typeof(DateTime))
     {

          var templateColumn = new DataGridTemplateColumn();
          templateColumn.CellTemplate = (DataTemplate)Resources["DateTemplate"];
          templateColumn.CellEditingTemplate =(DataTemplate)Resources["DateEditTemplate"];
             
          e.Column = templateColumn;
    }
}

Problemova cast:

<UserControl.Resources>

        <DataTemplate x:Key="DateTemplate">
            <TextBlock Text="{Binding ???}" />
        </DataTemplate>

        <DataTemplate x:Key="DateEditTemplate">
            <DatePicker SelectedDate="{Binding ???}" />
        </DataTemplate>

</UserControl.Resources>

Jak nastavit Binding aby to fungovalo? Pokud nevytvarim vlastni sloupec (DataGridTemplateColumn) pri automatickem generovani, tak vse funguje, takze to nejak musi jit udelat.

Nahlásit jako SPAM
IP: 85.93.110.–
JardaJirava0
Stálý člen
23. 7. 2013   #2
-
0
-

Ahoj,

  tady je výňatek z MSDN

Optionally, a period (.) path can be used to bind to the current source. For example, Text="{Binding}" is equivalent to Text="{Binding Path=.}".

http://msdn.microsoft.com/en-us/library/system.windows.data.binding.path.aspx

  který by ti měl pomoci. Ve tvém případě, tedy pouze Binding, bez těch otazníčků.

Pěkný den,

Nahlásit jako SPAM
IP: 77.78.85.–
MCAD, MCPD
http://jirava.net/blog
http://xaml.cz - Magazín moderních technologií založených na XAML
m4r100
Návštěvník
23. 7. 2013   #3
-
0
-

Bohuzel jeste to neni uplne ono. Ted mi to zobrazuje System.Data.DataRowView misto casu.

Kdyz do te metody "DataGrid_AutoGeneratingColumn" pridam tento radek:

templateColumn.ClipboardContentBinding = e.Column.ClipboardContentBinding;

Tak po zkopirovani obsahu radku do schranky zjistuji, ze to datum tam je schovane, jenom se nezobrazuje. Nevis jak to zobrazit spravne? Jmeno sloupce v XAML nemam.

Na SO jsem nasel toto, ale nemuzu to aplikovat u sebe.

Nahlásit jako SPAM
IP: 85.93.110.–
JardaJirava0
Stálý člen
23. 7. 2013   #4
-
+1
-
Zajímavé

Ahoj,

  ten DataGridTemplateColumn budeš muset nahradit vlastním poděděným, který bude umět zpracovávat DataRowView

public class MyDataGridTemplateColumn : DataGridTemplateColumn
{
    public string ColumnName
    {
        get;
        set;
    }

    protected override System.Windows.FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
    {
        var cp = (ContentPresenter)base.GenerateElement(cell, dataItem);
        // prepis binding
        BindingOperations.SetBinding(cp, ContentPresenter.ContentProperty, new Binding(this.ColumnName));
        return cp;
    }
}

Pěkný den,

Nahlásit jako SPAM
IP: 77.78.85.–
MCAD, MCPD
http://jirava.net/blog
http://xaml.cz - Magazín moderních technologií založených na XAML
m4r100
Návštěvník
24. 7. 2013   #5
-
0
-

#4 JardaJirava
Diky, to pomohlo. Pridal jsem tam jeste prepsani metody "GenerateEditingElement" aby se zobrazilo datum i pri editovani.

Mam jeste problem, ze po vybrani datumu, treba v DatePicker, se mi to neulozi.

<DatePicker SelectedDate="{Binding Path=., Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

<!-- <TextBox Text="{Binding ., StringFormat=dd.MM.yyyy, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> -->

U toho DatePicker jsem nasel na internetu, ze je to znama chyba a melo by se pouzit misto "SelectedDate" "Text", ale nefunguje mi to. Zkousel jsem taky TextBox, taky nic. Takze problem bude asi jinde. 

Nahlásit jako SPAM
IP: 85.93.110.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 79 hostů

Podobná vlákna

WPF TreeView Binding — založil David Roško

WPF Binding &amp; DLINQ — založil Xelender

Vyhledáni v datagrid — založil Geee

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý