[英]C# DataGridView get selected Row / Column value
我正在尝试获取所选行和特定列的值。 我已经从 stackoverflow 尝试了一些想法,但还没有奏效。 如果我使用此代码:
string strid = "";
DataRowView rowview = DG1.SelectedItem as DataRowView;
strid = rowview.Row["Id"].ToString();
MessageBox.Show(strid);
我收到此错误:
NLauncher.exe 中发生类型为“System.NullReferenceException”的未处理异常
附加信息:
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt。
我的 XAML:
<DataGrid IsReadOnly="True" Name="DG1" ItemsSource="{Binding}" AutoGenerateColumns="False" SelectionChanged="DG1_SelectionChanged_1" SelectedItem="{Binding Path=SelectedDG1, Mode=TwoWay}" >
<DataGrid.Columns>
<mui:DataGridTextColumn x:Name="id" Header="#ID" Binding="{Binding id}"/>
<mui:DataGridTextColumn Header="Clientname" Binding="{Binding name}" />
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu >
<MenuItem Header="Menu 1" Click="MenuItem_Click" />
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
我的完整 C# 代码: http : //pastebin.com/WEHV2Z6e
我只想得到所选行的“ID”列的值。
如果您的SelecetdItem
像这样绑定到Property
:
private DataGridItem selectedDG1;
public DataGridItem SelectedDG1
{
get { return selectedDG1; }
set { selectedDG1 = value;
UpdateProperty("SelectedDG1");
}
}
对于 DataGrid 的 DataItem:
public class DataGridItem
{
public string name { get; set; }
public int id { get; set; }
}
然后可以将 ID 获取为SelectedDG1.id
。
并将
System.Data.DataRowView rowview = DG1.SelectedItem as System.Data.DataRowView;
是错的。 这仅在ItemSource
是Datatable
时ItemSource
。 如果ItemSource
是一个集合,则:
var selctedItem = DG1.SelectedItem as DataGridItem;
if (selctedItem != null)
{
int value = selctedItem.id;
}
无论如何,您可以通过对该行进行 Null 检查来抑制异常:(此外,您的DataGridColumn
绑定到“id”,并且您正在尝试检索也会导致 null 异常的“Id” )
if (rowview != null)
strid = rowview.Row["Id"].ToString();
您可能会收到 NullReferenceException 因为您的演员
DataRowView rowview = DG1.SelectedItem as DataRowView;
无效并返回空值。 这意味着无论 DG1.SelectedItem 是什么类型,它都不能转换为“DataRowView”类型。
对于访问 ID 本身,Kylo Ren 的回答可能是处理它的最佳方式。
编辑:因为 rowView 为 null,所以在尝试访问 Row 时会收到 NullReferenceException:
strid = rowview.Row["Id"].ToString();
有一个简单的方法可以解决这个问题。
而不是使用;
DataRowView rowview = DG1.SelectedItem as DataRowView;
用;
dynamic rowView = DG1.SelectedItem;
之后;
strid = rowview.Id.ToString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.