1

我有一个GridView,我写了一个 DataBound 函数来分配一个工具提示。但它没有被分配。我写的函数是:

SqlCommand comd = new SqlCommand("SELECT Location_Profile_Name, " + Label10.Text + " as Home_Profile FROM Home_Profile_Master", con);
        SqlDataAdapter da = new SqlDataAdapter(comd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        GridView3.DataSource = dt;
        GridView3.DataBind();

protected void GridView3_DataBound(object sender, EventArgs e)
    {
        var gv = (GridView)sender;

        foreach (GridViewRow row in GridView3.Rows)
        {
            string label2 = row.Cells[2].Text.Trim();

            if (label2.Length != 0)
            {
                con.Open();
                string str = "SELECT Location_Profile_Tool_Tip FROM Location_Profile_List_ToolTip WHERE Location_Profile_Name='" + label2 + "'";
                SqlCommand cmd = new SqlCommand(str, con);

                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    row.Cells[2].ToolTip = dr[0].ToString().Trim();
                }
                con.Close();
            }
        }
    }

当我调试label2为空。正在为另一个 Grid 执行相同的代码。怎么了...!!请帮助..!

4

2 回答 2

2

嗯...也许这就是问题所在?

//                          **************
foreach (GridViewRow row in GridView3.Rows)

应该?

//                          **
foreach (GridViewRow row in gv.Rows)

编辑

啊! Cells 是一个从零开始的数组。如果你想要第二个单元格,你需要使用数组索引 1。

这个:

//                        *
string label2 = row.Cells[2].Text.Trim();

应该:

//                        *
string label2 = row.Cells[1].Text.Trim();

编辑

使用数字单元格索引非常难以阅读且非常脆弱。如果您添加一列或删除一列,您的所有代码都会中断。我强烈建议使用单元名称,如下所示:

//                  ************
string label2 = row[Label10.Text].Text.Trim();

编辑

也许这对你会更好?

string label2 = ( (DataRow) row.DataItem )[Label10.Text].ToString().Trim();
于 2012-09-28T13:58:55.687 回答
0

拥有一个 TemplateField,然后使用 ItemTemplate 的 ID,可以解决问题。

protected void GridView3_DataBound(object sender, EventArgs e)
    {           
        foreach (GridViewRow row in GridView3.Rows)
        {
            Label label1 = (Label)row.FindControl("Label1"); //ID of the ItemTemplate for my column to which I want ToolTip
            string label2 = label1.Text.Trim();

            if (label2.Length != 0)
            {
                con.Open();
                string str = "SELECT Location_Profile_Tool_Tip FROM Location_Profile_List_ToolTip WHERE Location_Profile_Name='" + label2 + "'";
                SqlCommand cmd = new SqlCommand(str, con);

                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    row.Cells[2].ToolTip = dr[0].ToString().Trim();
                }
                con.Close();
            }
        }
    }
于 2012-09-28T14:28:17.277 回答