【发布时间】:2017-06-26 03:43:38
【问题描述】:
我有一个datagrid,我想将特定列放入一个数组中,我想怎么做?我的 xml 看起来像:
<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 放入Datagrid dgSample 到Array 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
{
...
}
}
【问题讨论】:
-
你是什么意思将列...放入数组临时?
DataGridColumn不是ushort,这是您的数组类型。 -
你可以试试
var values = myDataGrid.Columns.Where(c => c.Header.ToString() == "Name").Select(c => Convert.ToUInt16(c.GetValue(TextBlock.TextProperty))).ToArray();。虽然它未经测试,但它使用标题名称获取列,如果这是必需的列,则将“名称”替换为“值”。假设列中的所有值都可以转换为ushort,但我建议检查空值或不可转换值。 -
@KeyurPATEL 您的解决方案绝对错误。您正在尝试获取
DataGridColumn的TextBlock.Text属性。如果列 Name 是DataGrid中唯一具有此名称的列,您将获得单个值。而且这个值不是表中某行的值。 -
@KeyurPATEL 您的建议运行时出现错误:
The name 'value' does not exist in the current context -
是的,正如@Maxim 提到的,我的建议是完全错误的。由于我目前正在使用数据网格,因此我很快就会为您提供真正的答案。