如何通过编程方式向WPF数据表格添加数据

10

如何在WPF中以编程方式向没有绑定的DataGrid添加数据项?DataGrid有4列。


3
数据绑定和以编程方式添加项目并不是互相排斥的。 - H.B.
DataGrid.Items.Add(new DataItem()); 我尝试过这个,但不知道如何创建“DataItem()”。 - katu
那么如何绑定不属于数据集的“列”呢? - katu
3个回答

18

不是很清楚你想要做什么。我猜想,你已经定义了一个位置来放置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" });
    }
}

希望这可以帮到您。

问候, Jörg


这个已经很好地运作了。但我想对一个在XAML中已经创建的DataGrid做同样的事情。我尝试了一下,我可以看到列被添加了,但是列里面没有显示任何内容。我认为问题出在DataBinding上。 我尝试了 <DataGridTextColumn Header="Code" Width="80" x:Name="colCode" Binding="{Binding}"><DataGridTextColumn Header="Code" Width="80" x:Name="colCode" Binding="{Binding ElementName=colCode}"> - katu
没事了,我已经搞定了。问题在于不同的列名和DataItem名称。 - katu

2

这是一个我用来从数据库检索数据的函数:

string query = "Select * from VWpatientinfo"; DataTable dataTableObject = new DataTable("表名");

它会返回一个数据表格对象,其中包含了从"VWpatientinfo"视图中选择的所有数据。

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

1

enter image description here

.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);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接