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 に答える