2008-12-23 79 views
0

我有一个数据库表,我想在DataGridView中显示。但是,它有几个外键,我不想向用户显示代表另一个表的整数。DataBinding与DataGridView C#

我有这样的数据表与列用户id 我有一列ID其他DataTable,列名

我想在DataGridView显示的用户名,而不是用户id在用户id = ID的。

我该怎么做?我也必须在同一个表中的几列上进行显示。

编辑:windows窗体,而不是web表单。

回答

2

你是如何填充DataTable的?您可以使用连接和适当的列指定DataAdapter的.SelectCommand的自定义SQL,或者在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和调用。

+0

字符串SQL = “选择*,u.username,c.company FROM活动” + “LEFT JOIN用户U” + “ON activities.user = u.id” + “LEFT JOIN客户Ç “+ ”ON activities.customerJob = c.id“; 它在'用户'的任何想法为什么失败? – Malfist 2008-12-23 19:15:39

1

您可以创建一个存储过程,让该电源线连接来获取用户的姓名,或任何你需要的领域,MAPP它有这个信息和绑定DataGridView的一个List<YourClass>

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")); 
    } 
} 
0

你在使用Linq吗?
因为如果您使用的是Linq,您可以将该列的DataPropertyName设置为“User.UserName”,前提是您在设计器中设置了正确的关联关系。

0

您可以将DataGridView绑定到DataSet,该DataSet可以包含一个或多个数据表。第一个数据表可以用包含userid列的SELECT语句填充。第二个数据表可以包含用户名和ID。然后为数据集的Relations集合添加一个关系,该集合将第一个表的用户标识映射到第二个表的标识。使用数据集,创建一个新的默认视图管理器,它只显示用户名而不显示用户标识。将DataGridView的数据源设置为数据集的DefaultViewManager。