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"的值。

C# 数据网格视图获取选定的行/列值

如果你的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();