0

我有一个GridView完全由用户定义的。的第一列GridView来自ListBox1。标头是使用定义的ListBox2

对于 的每个标题文本GridView,我相应地在数据库的表中存储了一行文本。

如何使用该行作为GridView. 仅供参考:不同的标题列在数据库表中存储了不同的文本行。

我附上了一个屏幕截图,它将告诉我究竟取得了什么成就以及我的期望。提前谢谢你,请帮忙。

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();
4

1 回答 1

1

您可以使用 GridView 的RowDataBound事件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;
        }
    }
}

请注意,您需要using System.Linq;为 Linq-To-DataSet添加

于 2012-08-30T12:04:52.443 回答