在asp.net中隐藏gridView行

时间:2020-03-06 14:32:13  来源:igfitidea点击:

我正在创建一个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"的行号