[英]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.