【问题标题】:bind gridview dynamically with label and tooltip使用标签和工具提示动态绑定gridview
【发布时间】:2011-09-02 15:48:21
【问题描述】:

我想在后面的代码中将 gridview 与数据表绑定,我想在 gridview 的每个单元格中添加标签并在其值的标签上显示工具提示...我没有得到工具提示.. (我想展示那个舞台的每个座位)!并想提示它,还有我的舞台 可能会改变,所以我想要动态)

帮帮我..我的代码在这里

//网格视图在页面加载时绑定 它给了我索引超出范围。必须是非负数且小于集合的大小。参数名称:索引

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{


            for (int i = 0; i < table.Rows.Count; i++)
            {
                for (int j = 0; j < table.Columns.Count; j++)
                {


                    Label lbl = new Label();
                    lbl.Text = GridView1.DataKeys[e.Row.RowIndex]["LabelText"].ToString();
                    lbl.ToolTip = GridView1.DataKeys[e.Row.RowIndex]["TooltipText"].ToString();
                    e.Row.Cells[0].Controls.Add(lbl);

                }

            }

}

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

    您需要将标签添加到 GridView 的每一行中的一个单元格中。我建议将标签和工具提示的信息存储在数据键集合中,并在 OnRowDataBound 事件中添加标签。

    选项 1:

    编辑:添加标记以显示如何添加数据键

    如下例所示定义数据键。将 LabelTextColumnTooltipTextColumn 替换为您要用于文本和工具提示的实际值。另外,请注意此处如何设置 OnRowDataBound 事件处理程序:

    <asp:GridView ID="GridView1" runat="server" DataKeyNames="LabelTextColumn, TooltipTextColumn" OnRowDataBound="GridView1_RowDataBound" ...>
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            ...
        </Columns>
    </asp:GridView>
    

    编辑:更正了使用 RowIndex 获取数据键的错误

    由于您在 RowDataBoundEvent 中,因此您不需要使用循环。 RowDataBound 事件是在循环中调用的,因为每一行都是数据绑定的,这就是为什么您可以使用 e.Row 访问当前行的原因

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        //we don't need this anymore, because the label is already in the row
        //Label lbl = new Label(); 
    
        //get the label from the row
        Label lbl = (Label)e.Row.FindControl("Label1");
    
        --set the text and tooltip text using the datakeys specified in the markup
        lbl.Text = grd.DataKeys[e.Row.RowIndex]["LabelTextColumn"].ToString();
        lbl.ToolTip = grd.DataKeys[e.Row.RowIndex]["TooltipTextColumn"].ToString();
    
        //we don't need this anymore either, because the label is already added to the row
        //e.Row.Cells[0].Controls.Add(lbl);
    }
    

    选项2:使用内联Eval()函数设置文本和工具提示文本

    <asp:GridView ID="GridView1" runat="server"  ...>
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%#Eval("LabelTextColumn")' Tooltip='<%#Eval("TooltipTextColumn")%>' />
                </ItemTemplate>
            </asp:TemplateField>
            ...
        </Columns>
    </asp:GridView>
    

    【讨论】:

    • 感谢您的帮助,但我得到的是工具提示,而不是正确的网格视图。你能帮助我吗 ??和 e.rowindex 给我错误 System.Web.UI.WebControls.GridViewRowEventArgs' does not contain a definition for 'RowIndex' and no extension method 'RowIndex' 接受第一个 a
    • @vivek:编辑了我的答案。应该是 e.Row.RowIndex。现在你遇到的另一个问题是什么?您希望标签显示在 GridView 的哪个位置?
    • 我尝试了 e.row.rowindex。行。我想要gridview中每个单元格的工具提示,请从头开始帮助我......
    • 你说你试过e.RowIndex。 e.Row.RowIndex 绝对有效。您确定您使用的是 GridViewRowEventArgs 吗?修改您的问题并发布您更新的代码。如果您也可以包含一些标记,那将很有帮助。
    • @vivek:查看编辑后的答案。提供了几种方法。密切关注代码。
    【解决方案2】:

    当您进行数据绑定时,它会破坏当前控件集合并使用提供的数据源进行填充。

    对于您的特定应用程序,您还需要附加到GridView.RowCreated 事件,然后插入您需要的工具提示。

    【讨论】:

    • 我在数据库中绘制了一个舞台表。我想在 gridview 中显示整个表,每个单元格都有一个工具提示。你能帮帮我吗?
    【解决方案3】:

    Gridview.RowDataBound Event 的处理程序中实现这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多