Привязка данных с помощью DataGridView C # - PullRequest
0 голосов
/ 23 декабря 2008

У меня есть таблица базы данных, которую я хочу отобразить в DataGridView. Однако он имеет несколько внешних ключей, и я не хочу показывать пользователю целое число, представляющее другую таблицу.

У меня есть DataTable с колонкой userId У меня есть другая DataTable с идентификатором столбца и именем пользователя столбца

Я хочу, чтобы DataGridView показывал имя пользователя вместо userId, где userId = id.

Как я могу это сделать? Я также должен сделать это для нескольких столбцов в одной таблице, которые будут отображаться.

edit: формы Windows, а не веб-формы.

Ответы [ 5 ]

2 голосов
/ 23 декабря 2008

Вот несколько вариантов для рассмотрения ...

1 - Если у вас есть доступ к базе данных, у вас есть созданное представление или хранимая процедура, которая возвращает «денормализованные» данные. Затем вы можете привязать свой GridView непосредственно к этому, и все будет сделано.

2 - Создайте столбцы шаблона для тех полей, которые вам нужно получить. Затем в событии RowDatabound для GridView вы можете программно вызвать и получить соответствующую информацию поиска и отобразить ее в указанном столбце. Ваш код будет выглядеть примерно так:

protected void FormatGridView(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
   if (e.Row.RowType == DataControlRowType.DataRow) 
   {
      e.Row.Cells[1].Text = GetUserId(Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "userid"));
   }
}
2 голосов
/ 23 декабря 2008

Как вы заполняете DataTable? Вы можете указать пользовательский SQL с объединениями и соответствующими столбцами для .SelectCommand объекта DataAdapter или указать собственный SQL в .CommandText объекта xxxCommand.

Например

myAdapter.SelectCommand = "Select a.column1, a.column2, b.username from tablea a inner join tableb b on b.userid = a.userId"

Или

myCommand.CommandType = Text;
myCommand.CommandText = ""Select a.column1, a.column2, b.username from tablea a inner join tableb b on b.userid = a.userId";

Или, как уже упоминалось, вы можете создать представление или сохраненный процесс в вашей базе данных и вызвать его.

1 голос
/ 23 декабря 2008

Вы можете создать хранимую процедуру, которая сделает требуемые объединения, чтобы получить имена пользователей или любое поле, которое вам нужно, и сопоставить его с классом, который имеет эту информацию, и связать datagridView с List<YourClass>

0 голосов
/ 04 марта 2009

Вы можете привязать DataGridView к DataSet, который может содержать одну или несколько таблиц данных. Первая таблица данных может быть заполнена оператором SELECT, который содержит столбец идентификатора пользователя. Вторая таблица данных может содержать имена пользователей и идентификаторы. Затем добавьте отношение в коллекцию Relations набора данных, которое сопоставляет идентификатор пользователя первой таблицы с идентификатором второй таблицы. Используя набор данных, создайте новый менеджер представлений по умолчанию, который показывает только имя пользователя, а не идентификатор пользователя. Установите для источника данных DataGridView значение DefaultViewManager набора данных.

0 голосов
/ 23 декабря 2008

Вы используете Linq?
Потому что, если вы используете Linq, вы можете установить DataPropertyName столбца в «User.UserName», если вы установили правильную связь в конструкторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...