我正试图从DataGrid的wpf中的选定项目中获取Row的特定列。
DataGrid的名称为Datagrid_Newsale
。
我选择了整行的警报,所以我尝试映射它的列。
假设行是 -
{ ID = 3, CustomerName = xyz, SaleDate = 05.08.2013 00:00:00, TotalAmount = 10 }
然后它的列CustomerName=xyz
将显示在文本框中。
获取行 -
var copyitem = Datagrid_NewSale.SelectedItem;
if (copyitem == null)
{
MessageBox.Show("Please select values from list");
}
if (copyitem != null)
{
MessageBox.Show(copyitem.ToString());
}
为了将customerName放入文本框,我尝试创建一个新的模型实例 -
public class CustomerDetailes
{
public string CustomerName { get; set; }
}
来自客户表的数据库中的值 -
public void viewcustomername()
{
List<CustomerDetailes> ilist = null;
ilist = (from order in db.Customer
select new CustomerDetailes
{
CustomerName= order.CustomerName
}).ToList();
txtCustumer.Text = ilist.ToString();
}
再试一次 -
CustomerDetailes copyitem = (CustomerDetailes)Datagrid_NewSale.SelectedItem;
if (copyitem == null)
{
MessageBox.Show("Please select values from list");
}
if (copyitem != null)
{
MessageBox.Show(copyitem.ToString());
}
txtCustomer.text=copyitem.CustomerName; //CustomerName into a textbox
但是它在copyitem中引用了null。
如何从整行获取特定列。
答案 0 :(得分:0)
您必须将DataGrid的ItemsSource
绑定到CustomerDetails集合才能在SelectedItem中获取CustomDetails。
在viewmodel中创建属性(如果使用MVVM)或在后面的代码中创建属性
List<CustomerDetails> customerDetails = new List<CustomerDetails>();
List<CustomerDetails> MyCollection
{
get
{
return myList;
}
set
{
myList = value;
PropertyChanged(this, new PropertyChangedEventArgs("MyCollection"));
}
}
并在xaml中做。
<DataGrid ItemsSource="{Binding MyCollection}"/>
如果您直接填写datagrid中的Items,请添加CustomerDetails的实例,如
dataGrid.Items.Add(new CustomerDetails(){Name = "abc"}, xyz propertis)
由于
答案 1 :(得分:0)
如果您可以从您的选择事件中访问网格,那么下面应该为您的列提供
((DataGrid)sender).CurrentCell.Column.Header
并使用列名称的映射到要显示的对象的属性
答案 2 :(得分:0)
我提出了这个简单的解决方案。
我的案例中匿名的copyitem
的映射数据类型。在这种情况下,使用Dynamic
数据类型解决了我的问题。
由于我的数据是动态的,然后我试图绘制出特定的列,所以静态地执行它是不可能的,因为那时没有数据。
使用动态数据类型 -
dynamic copyitem = dataGrid1.SelectedItem;
访问媒体资源 -
int localId = copyitem.ID;
此外,对于customerName,TotalAmount我做了同样的事情。
Linq查询更改 -
var query= (from order in db.Customer
where order.ID=localId
select order).ToList();
DataGrid_OpenSale.ItemsSource=query
//将数据返回到另一个数据网格。
答案 3 :(得分:0)
在VB⠀⠀⠀
Private Sub SCUSTDataGrid_GotFocus(sender As Object, e As RoutedEventArgs) Handles SCUSTDataGrid.GotFocus
Dim og As DataGridCell = e.OriginalSource
Dim ccontent As TextBlock = og.Content
Dim dg As DataGrid
dg = e.Source
Dim selcol As String = dg.CurrentCell.Column.Header.ToString
MessageBox.Show(selcol.ToString + ccontent.Text + " got focus event")
End Sub