我想在后面的代码中绑定gridview和datatable,我想在gridview中的每个单元格中添加标签,并在其值的标签上显示工具提示...我没有得到工具提示.. (我想展示那个舞台的每个座位)!!!并想要它的工具提示,以及我的舞台 可能会改变,所以我想动态地)
帮助我..我的代码在这里
//网格视图在页面加载时绑定 它给了我指数超出范围。必须是非负数且小于集合的大小。参数名称:index
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);
}
}
}
答案 0 :(得分:1)
您需要将Label添加到GridView的每一行中的单元格。我建议将Label和工具提示的信息存储在数据密钥集合中,并在OnRowDataBound事件中添加标签。
选项1:
编辑:添加了标记以显示如何添加数据密钥
定义数据键,如下例所示。将LabelTextColumn
和TooltipTextColumn
替换为您要用于文本和工具提示的实际值。另外,请注意如何在此处设置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>
答案 1 :(得分:0)
当您进行数据绑定时,它会销毁当前控件集合并使用提供的数据源进行填充。
对于您的特定应用程序,您还需要附加到GridView.RowCreated
事件,然后插入所需的工具提示。
答案 2 :(得分:0)