2015-06-15 3 views
1

Когда я хочу поместить значения в массив, выбранный из списка checklistbox. А затем скажите:C# CheckedListbox values ​​

messagebox.show (значения [0]);

Он говорит: System.Data.DataRowView

Это мой текущий код:

 string[] itemArr = new string[clbTables.CheckedItems.Count]; 
     int counter = 0; 
     foreach (object item in this.clbTables.CheckedItems) 
     { 
      string temp = Convert.ToString(item); 
      itemArr[counter] = temp; 
      counter++; 
     } 
     MetroMessageBox.Show(this, itemArr[0].ToString()); 

Что я делаю неправильно здесь>?

EDIT ::

clbTables.DataSource = sqlDisplayContent.connectDataTable("SELECT ('Tafelnr: '+ CONVERT(varchar,tafelnr)+' Zitplaatsen: '+ CONVERT(varchar,zitPlaatsen)) AS dispValue,tafelnr FROM tabel"); 
clbTables.DisplayMember = "dispValue"; 
clbTables.ValueMember = "tafelnr"; 



class sqlDisplayContent 
     { 
      public static DataTable connectDataTable(string query) 
      { 
       SqlCommand comm= sqlCrud.returnSqlCommand(query); 
       SqlDataAdapter sda = new SqlDataAdapter(comm); 
       DataTable dt = new DataTable(); 
       sda.Fill(dt); 
       return dt; 
      } 
     } 

Thankss 
+0

Я не вижу 'messagebox.show (значения [0]);' в вашем коде ... –

+0

вы возвращаете весь объект как элемент (а не текстовое значение объекта) –

+0

Здесь есть хороший пример: https://msdn.microsoft.com/en-us/library/system.windows.forms.checkedlistbox.checkeditems(v=vs.110).aspx – dmigo

ответ

1

Вопрос заключается в том, что:

Convert.ToString(item); 

просто вызвать метод ToString() объекта и магазина, который, который в этом случае дает вам тип объекта. В этом случае тип - System.Data.DataRowView. Я предлагаю вам получить доступ к определенному полю в строке, которую вы хотите использовать:

((DataRowView)item).Row["FieldName"].ToString(); 

вместо этого. Вы захотите заменить «FieldName» на любое имя вашего столбца, которое вы хотите. Кроме того, вы можете использовать индекс int вместо строковой ссылки. Конечно, если вам нужно получить доступ к нескольким полям, вы можете сделать это путем простой конкатенации строк. Проблема в том, что вам нужно получить доступ к определенному полю, которое вы хотите. Не вся строка, в которой вы сейчас находитесь.

Надеюсь, это поможет!

пару ссылок: DataRow, DataRowView

+0

Хорошо. Это была моя вина. У меня создалось впечатление, что checkedItems будет сборкой строк. Я сделал еще несколько исследований и вместо того, чтобы сказать 'item.Row [" FieldName "]. ToString()', try '((DataRowView) item) .Row.Item [" FieldName "]. ToString();'. Вы захотите заменить «FieldName» на любое имя вашего столбца, которое вы хотите. Кроме того, вместо этого вы можете использовать индекс int. Ссылки: [DataRow] (https://msdn.microsoft.com/en-us/library/system.data.datarow (v = vs.110) .aspx), [DataRowView] (https://msdn.microsoft. ком/EN-US/библиотека/system.data.datarowview (v = vs.110).aspx) –

+0

Приносим извинения за проблемы. Попробуйте элемент '((DataRowView)) .Row [" FieldName "]. ToString();'. Если это не сработает, я удалю сообщение, чтобы не беспокоить вас с помощью более неправильных ответов. –

+0

Workss thankyou !! – Jamie

0
string temp = ((CheckBox)item).Text; 

Вы передаете в объекте, а не текст объекта (который является то, что он, кажется, вы хотите, чтобы код, чтобы сделать).

+0

Когда я это делаю, это говорит мне: «Дополнительная информация: невозможно лить объект типа« System.Data.DataRowView »для ввода« System.Windows.Forms.CheckBox ».» – Jamie

+0

@ Джейми, Огайо! Хорошо, можете ли вы обновить свой код, чтобы показать нам, где CheckedListBox внедряется в DataGrid? –

+0

@Jamie, я нашел здесь код в SO, который вы можете использовать для получения объекта, который содержит текст. Я не уверен, как получить текст, но он должен быть достаточно простым с помощью Visual Studio, чтобы показать вам. http://stackoverflow.com/questions/21450681/how-do-i-add-checked-items-in-my-checkedlistbox-to-a-datagridview –

Смежные вопросы