2010-03-16 6 views
5

Я хочу привязать текстовое поле к единому объекту DataRow (передан в форму диалога для редактирования). Вот мой код:Связывание DataRow с TextBox

DataRow row = myDataTable.NewRow(); 
EditForm form = new EditForm(row); 

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

и я gettinh ошибку: Не удается выполнить привязку к свойству или столбца в DataSource. Вы знаете, что мне не хватает или какие-то обходные пути?

[Добавлено]

Мой DataTable наверняка содержит DataColumn с ColumnName = "имя". Вот мой код для создания 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; 
      } 
     } 
    } 
+0

столбец 'строки' Есть ли у 'имя'? –

+0

да, это наверняка есть. –

+0

вы попробовали переплетаться с datatable? –

ответ

0

Я попытался воспроизвести это (с VS 2008 SP1), и я получаю InvalidCastException, если строка имеет нулевые данные в столбце имя, но программа продолжает и работает.

Чтобы получить то же самое исключение, что и вы, я должен сделать ошибку в имени столбца при связывании. Поэтому я вынужден повторить вопрос Хенка или попросить вас показать, как вы создаете DataTable.

+0

Я знаю InvalidCastException. Чтобы избежать этого, я использую: Binding b = nameTextBox.DataBindings.Add («Текст», строка, «имя»); b.NullValue = ""; –

0

Существует перегрузка для создания DataBinding, которая принимает объект для использования в случае, если исходным объектом является DBNull. Вы можете попробовать это.

2

Попробуйте это:

DataView dv = myDataTable.DefaultView; 

dv.RowFilter = "id=1"; 

nameTextBox.DataBindings.Add("Text",dv,"NAME"); 
Смежные вопросы