Как получить значение столбца DataTable с массивом?

1

У меня есть DataTable, который я создаю следующим образом:

DataTable data = new DataTable();

data.Columns.Add("year");
data.Columns.Add("month");
data.Columns.Add("id");
data.Columns.Add("displayText");

data.Columns["displayText"].Expression = "Convert(year, 'System.String') + ' / ' + Convert(month , 'System.String')";

DataColumn[] keyColumns = new DataColumn[2];
keyColumns[0] = data.Columns["year"];
keyColumns[1] = data.Columns["month"];

data.PrimaryKey = keyColumns;

data используются в качестве источника данных для выпадающего списка monthList

this.monthList.DataTextField = "displayText";
this.monthList.DataValueField = "id";
this.monthList.DataSource = data;
this.monthList.DataBind();

Затем у меня есть обработчик событий, в котором мне нужно извлечь оба компонента столбца ключа.

Как я могу это сделать?

Я попытался использовать monthList.SelectedItem.Value, но он содержит строку "System.Object[]".

Обновление 1: снимок экрана отладчика.

Изображение 174551

Обновление 2: Здесь, как я добавляю элементы к data:

var row = data.NewRow();

row["year"] = 2014;
row["month"] = 5;
row["id"] = new object[] { 2014, 5 };

data.Rows.Add(row);
Теги:

3 ответа

1
Лучший ответ

Не знаете, почему вы пытаетесь сохранить массив в своем поле id учитывая, что одни и те же значения хранятся в одной и той же строке, но в разных столбцах, но вы можете извлечь значения в этом поле, если объявить свой столбец типа типа

  data.Columns.Add("id", typeof(object));

и затем извлекать их с помощью

 object[] ids = (object[])data.Rows[0]["id"];


 for(int x = 0; x < ids.Length; x++)
     Console.WriteLine(Convert.ToInt32(ids[x]));
  • 0
    Когда у меня есть ссылка на monthList ( monthList.DataSource == null true), но не на data , как я могу получить доступ к двум другим столбцам int?
  • 0
    Связываете ли вы свой источник данных при обратной передаче вашей страницы?
Показать ещё 5 комментариев
1

Вы установили:

this.monthList.DataValueField = "id";

Поэтому для свойства Value будет установлено значение столбца "id" в вашем DataTable.

Столбец "id" в вашем DataTable определен (по умолчанию) как тип "String", но вы установили его в массив объектов:

row["id"] = new object[] { 2014, 5 };

Столбец фактически будет содержать

(new object[] { 2014, 5 }).ToString();

который является той строкой, которую вы видите.

Вы можете попробовать объявить столбец id как объект типа []:

dt.Columns.Add("id", typeof(object[]));

После этого вы сможете monthList.SelectedItem.Value к object[] и извлечь два значения.

Сказав это: лично я, вероятно, поместил бы два значения, составляющие id, в отдельные столбцы int.

  • 0
    Я хочу, чтобы поле id содержало два целых числа. Мой вопрос - как я могу извлечь эти два целых числа из свойства SelectedValue или SelectedItem раскрывающегося списка?
  • 0
    data.Columns.Add("id", typeof(object[])); не помогло
Показать ещё 1 комментарий
1

Кажется, что привязка столбца, который содержит коллекцию объектов к свойству DataValueField для DropDownList, не поддерживается конструкцией (это делает атрибут value тега option для имени типа коллекции).

Вы можете попытаться сбрасывать объекты коллекции на одно строковое значение и использовать это строковое значение в качестве ключа...

Например:

row["id"] = "2014_05";

EDIT:

Конечно, вы можете вычислить значение этого ключа автоматически, используя ту же функцию, что и для столбца displayText:

data.Columns["id"].Expression = "Convert(year, 'System.String') + '_' + Convert(month , 'System.String')";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню