如何在WPF中以编程方式向没有绑定的DataGrid
添加数据项?DataGrid
有4列。
不是很清楚你想要做什么。我猜想,你已经定义了一个位置来放置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}">
- katuDataItem
名称。 - katu这是一个我用来从数据库检索数据的函数:
string query = "Select * from VWpatientinfo";
DataTable dataTableObject = new DataTable("表名");
它会返回一个数据表格对象,其中包含了从"VWpatientinfo"视图中选择的所有数据。
obj.DataRetrive(query,dataTableObject);
DataGridName.ItemsSource = dataTableObject.DefaultView;
.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);
}
}