BindingSource获取当前行

时间:2012-07-07 15:01:10

标签: c# datasource generic-list bindingsource

我无法获得当前行值。我该怎么办?

bindingSource1.DataSource = LData; (LData is Generic List)
public DataRow currentRow
    {
        get
        {
            int position = this.BindingContext[bindingSource1].Position;
            if (position > -1)
            {
                return ((DataRowView)bindingSource1.Current).Row;
            }
            else
            {
                return null;
            }
        }
    }

我无法获得当前行:

    MessageBox.Show(currentRow["NAME"].ToString());

获取Err:InvalidCastException,我该怎么办? 感谢。

1 个答案:

答案 0 :(得分:3)

如果您将DataRow设置为bindingSource1.Current而不是DataSource,则List<T>中的DataTable个对象可能无法获得}。在您的情况下,bindingSource1.Current将包含泛型类型的实例。

我想你是这样初始化LData:

LData = new List<T>();

该属性应如下所示:

public T currentRow
{
    get
    {
        int position = this.BindingContext[bindingSource1].Position;
        if (position > -1)
        {
            return (T)bindingSource1.Current;
        }
        else
        {
            return null;
        }
    }
}

你可以读取这样的值(假设NameT的属性):

MessageBox.Show(currentRow.Name);

当然没有经过测试,但这样的事情应该有效。使用以下行中的调试器来查看Current属性的内容实际上是什么:

return (T)bindingSource1.Current;