【问题标题】:How to add Data to a WPF datagrid programatically如何以编程方式将数据添加到 WPF 数据网格
【发布时间】:2012-08-14 10:24:40
【问题描述】:

如何在没有绑定的 WPF 中以编程方式将数据项添加到 DataGridDataGrid 有 4 列。

【问题讨论】:

  • 数据绑定和以编程方式添加项目并不相互排斥。
  • DataGrid.Items.Add(new DataItem());我试过了,但不知道要创建DataItem()
  • 那么如何绑定不是来自datasetcolumns

标签: c# wpf datagrid


【解决方案1】:

不是很清楚,你喜欢做什么。我猜,你已经定义了一些你想放置 DataGrid 的地方。出于说明目的,我创建了一个新的 WPF 项目,并使用了发布第一个答案的 chridram 提供的代码。

在下面的 MainWindow.xaml 中,我将 Grid 命名为 MainGrid,以便在后面的代码中访问它:

<Window x:Class="WpfExperiments.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid Name="MainGrid"/>
</Window>

DataItem类不是WPF类,而是自己创建的自定义类:

public class DataItem
{
    public string Column1 { get; set; }
    public string Column2 { get; set; }
    public string Column3 { get; set; }
    public string Column4 { get; set; }
}

要让 DataGrid 以编程方式显示存储在 DataItem 对象中的数据,您可以执行以下操作:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        // Your programmatically created DataGrid is attached to MainGrid here
        var dg = new DataGrid();
        this.MainGrid.Children.Add(dg);

        // create four columns here with same names as the DataItem's properties
        for (int i = 1; i <= 4; ++i)
        {
            var column = new DataGridTextColumn();
            column.Header = "Column" + i;
            column.Binding = new Binding("Column" + i);
            dg.Columns.Add(column);
        }

        // create and add two lines of fake data to be displayed, here
        dg.Items.Add(new DataItem { Column1 = "a.1", Column2 = "a.2", Column3 = "a.3", Column4 = "a.4" });
        dg.Items.Add(new DataItem { Column1 = "b.1", Column2 = "b.2", Column3 = "b.3", Column4 = "b.4" });
    }
}

我希望这会有所帮助。

问候 约尔格

【讨论】:

  • 这很好用。但我想为已经在XAML 中创建的DataGrid 执行此操作。我在上面尝试过,我可以看到添加了列,但没有显示在列。我认为问题出在DataBinding。我试过&lt;DataGridTextColumn Header="Code" Width="80" x:Name="colCode" Binding="{Binding}"&gt;&lt;DataGridTextColumn Header="Code" Width="80" x:Name="colCode" Binding="{Binding ElementName=colCode}"&gt;
  • 它的alrite。我搞定了。问题是列名和DataItem 名称不同。
【解决方案2】:

这是我用来从数据库中检索数据的函数 string query = "Select * from VWpatientinfo"; DataTable dataTableObject = new DataTable("Table Name");

obj.DataRetrive(query,dataTableObject);
DataGridName.ItemsSource = dataTableObject.DefaultView;

【讨论】:

    【解决方案3】:

    .xaml:

    <DataGrid x:Name="dataGrid" Margin="10">
        <DataGrid.Columns>
            <DataGridCheckBoxColumn Binding="{Binding Path=Column1}"/>
            <DataGridTextColumn Binding="{Binding Path=Column2}"/>
        </DataGrid.Columns>
    </DataGrid>
    

    .cs:

    public class DataItem
    {
        public bool Column1 { get; set; }
        public string Column2 { get; set; }
    }
    
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            DataItem item = new DataItem();
            item.Column1 = true;
            item.Column2 = "test";
            dataGrid.Items.Add(item);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-23
      • 2011-04-22
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多