C# 数据网格视图获取选定的行/列值
本文关键字:列值 获取 数据 数据网 网格 视图 | 更新日期: 2023-09-27 18:34:33
我正在尝试获取所选行和特定列的值。我已经尝试了堆栈溢出的一些想法,但还没有奏效。如果我使用此代码:
string strid = "";
DataRowView rowview = DG1.SelectedItem as DataRowView;
strid = rowview.Row["Id"].ToString();
MessageBox.Show(strid);
我收到此错误:
类型为"System.NullReferenceException"的未处理异常 发生在朗彻.exe
附加信息:
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");
}
}
对于数据网格的数据项:
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
是一个集合,则:
var selctedItem = DG1.SelectedItem as DataGridItem;
if (selctedItem != null)
{
int value = selctedItem.id;
}
无论如何,您可以通过在该行上放置 Null 检查来抑制异常:(您的DataGridColumn
也绑定到"id",并且您正在尝试检索也可能导致空异常的"Id"(
if (rowview != null)
strid = rowview.Row["Id"].ToString();
你可能会得到一个 NullReferenceException,因为你的演员表
DataRowView rowview = DG1.SelectedItem as DataRowView;
无效并返回 null。这意味着无论哪种类型的DG1。SelectedItem 是,它不能强制转换为类型"DataRowView"。
对于访问ID本身,Kylo Ren的回答可能是最好的方法。
编辑:由于 rowView 为空,因此在尝试访问该行时会得到 NullReferenceException:
strid = rowview.Row["Id"].ToString();
有一个简单的方法可以解决这个问题。
而不是使用;
DataRowView rowview = DG1.SelectedItem as DataRowView;
用;
dynamic rowView = DG1.SelectedItem;
之后;
strid = rowview.Id.ToString();