WPF c#,用后面的代码绑定datagrid列

时间:2011-07-30 20:11:39

标签: c# wpf datagrid

我有问题如何将datagrid列绑定到集合?

 dataGrid1.Columns.Add(new DataGridTemplateColumn { Header="d", Binding = "RoomNumber"}); 

绑定不存在我可以用来绑定什么?

它工作得很好,但我需要将其与代码绑定

 <DataGridTextColumn Header="Room Number" Binding="{Binding RoomNumber}"/>

5 个答案:

答案 0 :(得分:8)

据我所知,您希望从代码后面添加数据网格列,该列应该使用绑定..?

这里是从后面的代码中添加datagrid列的示例代码段

 var col = new DataGridTextColumn();
            col.Header = "d";
            col.Binding = new Binding("RoomNumber");
            dataGrid1.Columns.Add(col);

使用这种方法,您可以根据需要添加任意数量的列,并且可以在运行时为每列提供数据绑定,并且可以一次指定itemssource ....

确保在数据网格中标记AutoGenerateColumns =“False”,以便您可以避免从itemssource添加不需要的列。

答案 1 :(得分:3)

来自bathineni(和其他人)的答案基本上是正确的,只要在某些时候您已将DataGrid的ItemsSource属性设置为您的集合。

答案 2 :(得分:1)

使用datagrid的itemssource属性绑定到集合。

MSDN

xaml中的示例:

<DataGrid ItemsSource="{Binding Path=Tracks, IsAsync=True}" AutoGenerateColumns="False" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Song" Width="*" Binding="{Binding Name}" />
            <DataGridTextColumn Header="Artist"  Width="*" Binding="{Binding Artist}" />
            <DataGridTextColumn Header="Album" Width="*" Binding="{Binding Album}" />
        </DataGrid.Columns>
</DataGrid>
代码背后的

示例:

dataGrid1.ItemsSource = tracks;

答案 3 :(得分:1)

无法将单个列与集合绑定。您必须将整个DataGrid绑定到一个可以是集合或任何东西的itemssource,然后您将每个列与该集合的某些部分绑定

答案 4 :(得分:0)

仅仅浪费了几个小时就可以完成这项工作,如果有人遇到麻烦,请添加我的起始代码作为示例。

基本模型:

public class SampleDataGridLine
{
    public SampleDataGridLine()
    {
        data = new string[6];
        for (int i = 0; i < 6; i++)
            data[i] = "n/a";
    }
    public string[] data;
    public string Cycle { get { return data[0]; } set { data[0] = value; } }
    public string a1 { get { return data[1]; } set { data[1] = value; } }
    public string a2 { get { return data[2]; } set { data[2] = value; } }
    public string a3 { get { return data[3]; } set { data[3] = value; } }
    public string a4 { get { return data[4]; } set { data[4] = value; } }
    public string a5 { get { return data[5]; } set { data[5] = value; } }
}

后面的代码:

int runningIndex;
private void Button_Click(object sender, RoutedEventArgs e)
{
    string text = "a" + runningIndex;

    var col = new DataGridTextColumn();
    col.Header = text;
    col.Binding = new Binding(text);
    dataGrid.Columns.Add(col);

    runningIndex++;
}

UI:

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto"/>
    <RowDefinition/>
  </Grid.RowDefinitions>
  <StackPanel Grid.Row="0" Orientation="Vertical" Margin="20">
    <Button Click="Button_Click" Width="100" Height="30" Content="AddColumn"/>
  </StackPanel>
  <StackPanel Grid.Row="1" Orientation="Vertical" Margin="20">
    <DataGrid x:Name="dataGrid" AutoGenerateColumns="False">
      <DataGrid.Columns>
        <DataGridTextColumn Header="Cycle" Binding="{Binding Cycle}"/>
      </DataGrid.Columns>
    </DataGrid>
  </StackPanel>
</Grid>