【问题标题】:WPF c#, bind datagrid column with code behindWPF c#,将datagrid列与后面的代码绑定
【发布时间】:2011-07-30 20:11:39
【问题描述】:

我有疑问如何将数据网格列绑定到集合?

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

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

它工作得很好,但我需要用后面的代码绑定它

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

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    据我了解,您想从后面的代码中添加数据网格列,并且该列应该与绑定一起使用..?

    这是从后面的代码中添加数据网格列的示例 sn-p

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

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

    确保在数据网格中标记 AutoGenerateColumns="False" 以避免从 itemssource 添加不需要的列。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • Column.Binding = new Binding("RoomNumber");
        【解决方案4】:

        使用数据网格的itemssourceproperty 绑定到集合。

        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;
        

        【讨论】:

        • 感谢重播。所以我不能将数据网格列一一绑定到代码后面的集合?
        【解决方案5】:

        只是浪费了几个小时来完成这项工作,如果有人遇到问题,请添加我的起始代码作为示例。

        基础模型:

        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++;
        }
        

        用户界面:

        <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>
        

        【讨论】:

        • 我认为不需要那些堆栈面板
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-24
        • 1970-01-01
        • 1970-01-01
        • 2012-07-07
        • 2011-08-14
        • 2015-01-26
        • 1970-01-01
        相关资源
        最近更新 更多