我有一个数据库表,我想在DataGridView中显示。但是,它有几个外键,我不想向用户显示代表另一个表的整数。
我有一个带有userId列的DataTable 我有另一个DataTable,其列ID和列用户名
我希望DataGridView显示用户名而不是userId,其中userId = id。
我该怎么做?我还必须在同一个表中的几个列上执行此操作。
编辑:Windows表单,而不是网络表单。
答案 0 :(得分:2)
以下是几个需要考虑的选项......
1 - 如果您有权访问数据库,则创建一个返回“非规范化”数据的视图或存储过程。然后,您可以将GridView直接绑定到此,一切都已完成。
2 - 为需要检索的字段创建模板列。然后在GridView的RowDatabound事件中,您可以以编程方式调出并获取相应的查找信息并在指定的列中显示该信息。您的代码看起来像这样:
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"));
}
}
答案 1 :(得分:2)
您如何填充DataTable?您可以使用连接和适当的列指定自定义SQL到DataAdapter的.SelectCommand,或者在xxxCommand对象的.CommandText中指定自定义SQL。
例如
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";
或者如前所述,您可以在数据库中创建一个视图或storedproc并调用它。
答案 2 :(得分:1)
您可以创建一个存储过程来创建必需的连接以获取用户的名称或您需要的任何字段,并将其映射到具有此信息的类并将datagridView绑定到List<YourClass>
答案 3 :(得分:0)
您使用的是Linq吗? 因为如果您使用的是Linq,只要您在设计器中设置了正确的关联,就可以将列的DataPropertyName设置为“User.UserName”。
答案 4 :(得分:0)
您可以将DataGridView绑定到DataSet,DataSet可以包含一个或多个数据表。可以使用包含userid列的SELECT语句填充第一个数据表。第二个数据表可以包含用户名和ID。然后为数据集的Relations集合添加一个关系,该集合将第一个表的用户标识映射到第二个表的id。使用数据集,创建一个新的默认视图管理器,它只显示用户名而不显示用户ID。将DataGridView的数据源设置为数据集的DefaultViewManager。