在asp.net中隐藏gridView行
我正在创建一个gridView
,它允许通过将插入所需的控件添加到FooterTemplate
中来添加新行,但是当ObjectDataSource
没有记录时,我添加了一个虚拟行,因为只有在以下情况下才显示FooterTemplate
有数据。
如何隐藏此虚拟行?我尝试在RowDataBound
上设置e.row.visible = false
,但该行仍然可见。
解决方案
这是GridView控件的不正确用法。 GridView控件有一个特殊的InsertRow,应在其中放置控件。
也许尝试:
e.Row.Height = Unit.Pixel(0);
这不是正确的答案,但是在我们获得正确答案之前,它可能会同时起作用。
也许使用CSS来设置不显示?
我认为这是我们需要的:
<asp:GridView ID="grid" runat="server" AutoGenerateColumns="false" ShowFooter="true" OnRowDataBound="OnRowDataBound"> <Columns> <asp:TemplateField HeaderText="headertext"> <ItemTemplate> itemtext </ItemTemplate> <FooterTemplate> insert controls </FooterTemplate> </asp:TemplateField> </Columns> </asp:GridView>
和背后的代码:
protected void OnRowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Attributes["style"] = "display:none"; } }
但是我不明白为什么要在页脚中添加"插入控件",而不是将它们放置在网格下方。
我们可以处理gridview的数据绑定事件并隐藏虚拟行。 (不要忘记在aspx代码中分配事件属性):
protected void GridView1_DataBound(object sender, EventArgs e) { if (GridView1.Rows.Count == 1) GridView1.Rows[0].Visible = false; }
GridView具有访问"页脚行"的特殊属性,名为" FooterRow"
然后,冷试yourGrid.FooterRow.Visible = false;
我在上一份工作中做到了这一点,但是由于我们可以添加行,因此我始终在页脚行中看到它。为了使其显示网格,我绑定了通常绑定类型的空行
dim row as Datarow = table.NewRow() table.AddRow(row) gridView.DataSource = table gridView.Databind()
然后它具有所有列,然后我们需要。我们可以通过拖动以下内容来访问页脚:
'this will get the footer no matter how many rows there are in the grid. Dim footer as Control = gridView.Controls(0).Controls(gridView.Controls(0).Controls.Count -1)
然后访问页脚中的任何控件,我们将执行以下操作:
Dim cntl as Control = footer.FindControl(<Insert Control Name Here>)
我认为我们可以执行以下操作:
footer.Visible = false
使页脚行不可见。
我希望这有帮助!
编辑,我只是弄清楚了你在说什么。添加新行时,基本上删除了该行,但是要执行此操作,我们需要检查是否还有其他行,如果有,请检查其中是否有值。
要删除虚拟行,请执行以下操作:
If mTable.Rows.Count = 1 AndAlso mTable.Rows(0)(<first column to check for null value>) Is DBNull.Value AndAlso mTable.Rows(0)(<second column>) Is DBNull.Value AndAlso mTable.Rows(0)(<thrid column>) Is DBNull.Value Then mTable.Rows.Remove(mTable.Rows(0)) End If mTable.Rows.Add(row) gridView.Datasource = mTable gridView.Databind()
要使其可见,只需使用:
Gridview.Rows.Item(i).Attributes.Add("style", "display:block")
并使它不可见
Gridview.Rows.Item(i).Attributes.Add("style", "display:none")
为什么不使用EmptyDataTemplate?即使我只使用了几天,它似乎也能很好地工作。
我们应该在GridView中使用DataKeyNames:
<asp:GridView ID =" GridView1" runat ="服务器" DataKeyNames =" FooID">`
然后在代码中检索它:GridView1.DataKeys [0] .Value.ToString()
其中" 0"是我们要获取" FooID"的行号