我有一个完全由用户定义的GridView
。 GridView
的第一列来自ListBox1
。标头使用ListBox2
定义。
对于GridView
的每个标题文本,相应地我在数据库的表中存储了一行文本。
如何将该行用作GridView
标题的工具提示。仅供参考:Differenrt标题列具有存储在数据库表中的不同文本行。
我附上了一个屏幕截图,它将告诉我到底取得了什么以及我期待的是什么。提前谢谢,请帮助。
http://img526.imageshack.us/img526/2083/47621961.jpg
在图像中,我在ListBox2中检索了数据库表的第一列(指GridView1),然后使用该ListBox显示为标题。
以下是我如何做的代码:
DataTable dt = new DataTable();
DataRow rw = default(DataRow);
for (int i = 0; i < ListBox2.Items.Count; i++)
{
dt.Columns.Add(ListBox2.Items[i].ToString(),System.Type.GetType("System.String"));
}
for (int j = 0; j < count; j++)
{
rw = dt.NewRow();
for (int i = 0; i < ListBox2.Items.Count; i++)
{
rw[ListBox2.Items[i].ToString()] = " ";
}
dt.Rows.Add(rw);
}
GridView2.DataSource = dt;
GridView2.DataBind();
答案 0 :(得分:1)
您可以将RowDataBound
使用GridView DataControlRowType.Header
事件:
protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
GridView grid = (GridView)sender;
DataTable tblProfiles = getProfiles();
for (int i = 0; i < grid.Columns.Count; i++)
{
String header = grid.Columns[i].HeaderText;
if (header.Length != 0)
{
DataRow drProfile = tblProfiles.AsEnumerable()
.FirstOrDefault(p => p.Field<String>("Profile_Name") == header);
if (drProfile != null)
e.Row.Cells[i].ToolTip = drProfile.Field<String>("Tool_Tip");
}
}
}
}
private DataTable getProfiles()
{
// assuming SQL-Server
var connectionString = "blah";
using (var con = new SqlConnection(connectionString))
{
var sql = "SELECT Profile_Name, Tool_Tip FROM Profiles;";
using (var da = new SqlDataAdapter(sql, con))
{
var tblProfiles = new DataTable("Profiles");
da.Fill(tblProfiles);
return tblProfiles;
}
}
}
请注意,您需要为Linq-To-DataSet添加using System.Linq;