将DataRow绑定到TextBox

7
我想将文本框绑定到单个DataRow对象(传递给对话框表单进行编辑)。这是我的代码:
DataRow row = myDataTable.NewRow();
EditForm form = new EditForm(row);

//in EditForm constructor
nameTextBox.DataBindings.Add("Text", row, "name");

我遇到了一个错误:无法绑定到数据源中的属性或列。你知道我缺少什么或者有什么解决方法吗?

[添加]

我的DataTable肯定包含ColumnName="name"的DataColumn。这是我创建DataTable的代码:

    public DataTable SelectReturnDataTable(string tableName, string sql, params SQLiteParameter[] parameters)
    {
        using (SQLiteConnection conn = new SQLiteConnection(_connectionString))
        {
            using (SQLiteCommand cmd = new SQLiteCommand(conn))
            {
                cmd.CommandText = sql;
                foreach (SQLiteParameter p in parameters)
                    cmd.Parameters.Add(p);

                SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
                DataTable dt = new DataTable(tableName);                                        

                conn.Open();                    
                da.Fill(dt);

                return dt;
            }
        }
    }

“row” 是否有 “name” 列? - H H
你尝试过绑定 datatable 吗? - Michael Buen
1
当您想使用DataRow时,创建DataBinding似乎存在问题。我也遇到了同样的问题。我创建了一个NewRow()并希望直接将文本框绑定到行的列。然后,当单击“保存”时,我将DataRow添加到DataTable中...显然,微软不希望我们这样做。 - IAbstract
3个回答

2

试试这个:

DataView dv = myDataTable.DefaultView;

dv.RowFilter = "id=1";

nameTextBox.DataBindings.Add("Text",dv,"NAME");

0

我尝试复现这个问题(使用VS 2008 SP1),如果行中的名称列有空数据,我会得到一个InvalidCastException,但程序会继续运行并正常工作。

为了得到与您相同的异常,我必须在绑定时犯错误。因此,我感到有必要重复@Henk的问题,或者请您展示如何创建DataTable。


我知道InvalidCastException。为了避免它,我使用以下方法:Binding b = nameTextBox.DataBindings.Add("Text", row, "name"); b.NullValue = ""; - Adrian Serafin

0

有一种创建DataBinding的重载方法,它接受一个对象作为参数,以便在源对象为DBNull时使用。你可以尝试一下这个方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接