2014-01-09 4 views
1

В то время как в процессе перехода с vb.net на C# я столкнулся с этой проблемой с использованием datatable. Итак, вы видите, что я хочу, чтобы получить значение поля из строки # 1, ссылаясь на имя заголовка столбца:Как получить значение поля из имени столбца

В vb.net, я был в состоянии сделать это:

Dim mydatatable as As New System.Data.DataTable 
Dim myvar as string 
myvar = mydatatable.Rows(1).Item("mycategory") 

Но в C# нет .item(). Существует, однако, DataArray[], но он принимает только целые числа.

something.InnerText = thisdata.Rows[1].ItemArray[1].ToString(); 

Правильно ли я верить, что я должен перебрать все заголовки столбцов в чтобы совпадать с именем столбца, а затем принести это индекс? Или есть способ работать, как у меня в vb.net?

ответ

2

Rows[1] возвращает второй ряд, который имеет номер DataRow. Ряд также имеет несколько индексаторов, который принимает column name, DataColumn object, column index и т.д.:

something.InnerText = thisdata.Rows[1]["mycategory"].ToString(); 

В основном выше строка эквивалентна следующая, где строка явно хранится в локальной переменной:

DataRow row = thisdata.Rows[1]; 
something.InnerText = row["mycategory"].ToString(); 

Но здесь это совершенно ясно, что происходит.

+0

Спасибо! Я не понимал, что 'Rows' является многомерным массивом. Я должен подождать еще 12 минут, чтобы отметить ответ ... – bgmCoder

+0

@BGM не совсем - Строки - это двусмысленная коллекция, содержащая DataRows. Но строки имеют индексаторы. Это не то же самое, что многомерный массив, который будет выглядеть как 'rowsArray [rowIndex, columnIndex]' –

+1

Ah. Я ценю урок. Спасибо за разъяснения. – bgmCoder

0

Если вы назвали столбцы, вы можете ссылаться на эти столбцы внутри скобки.

myvar = mydatatable.Rows[1]["mycategory"] 

Вы также можете использовать индексы.

myvar = mydatatable.Rows[1][1] 
+1

У тебя есть правильный ответ - но Сергей избил тебя ... – bgmCoder

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