我有一个datagrid
我希望将特定列放入数组中,我想如何做到这一点?我的xaml看起来像:
<Datagrid x:Name="dgSample" ItemsSource="{Binding ProductsView}"
<Datagrid.Columns>
<DatagridTextColumn Header="Name" Binding="{Binding ProductName, Mode=TwoWay}" />
<DatagridTextColumn Header="Value" Binding="{Binding ProductValue, Mode=TwoWay}" />
...
数组定义如下:
public static ushort[] temp = new ushort[20];
如何将数据网格 Value
中的列 dgSample
放入数组 temp
?提前谢谢!
-------------------------------------更新--------- ----------------------------
private ICollectionView _ProductsView;
public ICollectionView ProductsView
{
get { return _ProductsView; }
set
{
_ProductsView = value;
NotifyPropertyChanged();
}
}
private void UpdateProducts()
{
_ds = sdb.GetProducts();
ProductsView = new ListCollectionView(_ds.Tables["Products"].DefaultView)
{
Filter = obj =>
{
var Product= obj as DataRowView;
return SelectedProduct != null && SelectedProduct.ModelName == Product["ProductName"].ToString();
}
};
}
public DataSet GetProducts()
{
DataSet ds = StoreDbDataSet.ReadDataSet();
ObservableCollection<Product> products = new ObservableCollection<Product>();
foreach (DataRow productRow in ds.Tables["Products"].Rows)
{
products.Add(new Product((string)productRow["ProductName"],
(UInt16)productRow["ProductValue"]));
}
return StoreDbDataSet.ReadDataSet();
}
namespace ProductDatabase
{
public class Product : INotifyPropertyChanged
{
...
}
}
答案 0 :(得分:1)
假设您在代码隐藏中而不是在ViewModel中执行此操作,您可以使用这段代码来获取数组:
假设数据网格中每个项目的数据类型为&#34;产品&#34;
for (int i = 0; i < dgSample.Items.Count; i++)
{
var row = dgSample.Items[i] as Product;
if (row != null)
temp[i] = Convert.ToUInt16(row.ProductValue); //or if it is a ushort already, no need to Convert
}
或者,如果您正在使用MVVM结构并拥有ViewModel,那么您的项目源代码为ItemsSource="{Binding Product, Mode=TwoWay}"
(您的意思是产品吗?):
修改强>
由于您正在使用ICollectionView,您可以使用foreach直接遍历元素,或者只是Cast
将它转换为您的数据类型并转换为列表或数组,如下所示
temp = ProductsView.Cast<Product>().Select(p => Convert.ToUInt16(p.ProductValue)).ToArray();
如果您的变量名为ProductID或其他任何内容,请使用该名称替换ProductValue
。
正如Maxim所建议的,你的itemssource绑定不需要TwoWay,而是你的行有意义(如果你允许用户编辑它们):
<Datagrid x:Name="dgSample" ItemsSource="{Binding Product}"
<Datagrid.Columns>
<DatagridTextColumn Header="Name" Binding="{Binding ProductName, Mode=TwoWay}" />
<DatagridTextColumn Header="Value" Binding="{Binding ProductValue, Mode=TwoWay}" />
...