2008-12-23 49 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。