隐藏asp.net中的gridView行

时间:2008-09-22 12:23:37

标签: c# asp.net

我正在创建一个gridView,允许通过将插入所需的控件添加到FooterTemplate中来添加新行,但是当ObjectDataSource没有记录时,我添加了一个虚拟行因为FooterTemplate仅在有数据时显示。

如何隐藏这个虚拟行?我尝试在e.row.visible = false上设置RowDataBound,但该行仍然可见。

13 个答案:

答案 0 :(得分:4)

请尝试以下

    protected void GridView1_DataBound(object sender, EventArgs e)
    {
        GridView1.Rows[0].Visible = false;
    }

答案 1 :(得分:3)

您可以处理gridview数据绑定事件并隐藏虚拟行。 (不要忘记在aspx代码中分配事件属性):

protected void GridView1_DataBound(object sender, EventArgs e)
    {
        if (GridView1.Rows.Count == 1)
            GridView1.Rows[0].Visible = false;
    }

答案 2 :(得分:1)

我认为这就是你所需要的:

<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";
    }
}

但我不明白为什么要将“插入控件”添加到页脚而不是将它们放在网格下面。

答案 3 :(得分:0)

这是GridView控件的错误用法。 GridView控件有一个特殊的InsertRow,这是你的控件应该去的地方。

答案 4 :(得分:0)

也许试试:

e.Row.Height = Unit.Pixel(0);

这不是正确的答案,但在此之前它可能会起作用,直到您得到正确的答案。

答案 5 :(得分:0)

也许使用CSS设置display none?!

答案 6 :(得分:0)

GridView有一个特殊的属性来访问Footer Row,名为“FooterRow”

然后,你冷试试yourGrid.FooterRow.Visible = false;

答案 7 :(得分:0)

我在之前的工作中做过这个,但是因为你可以添加行,所以我总是在页脚行中看到它。为了使网格显示,我绑定了一个通常绑定的类型的空行

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()

答案 8 :(得分:0)

要使其可见,只需使用:

Gridview.Rows.Item(i).Attributes.Add("style", "display:block")

让它变得不可见

Gridview.Rows.Item(i).Attributes.Add("style", "display:none")

答案 9 :(得分:0)

为什么不使用EmptyDataTemplate?它似乎工作得很好,即使我只使用它几天......

答案 10 :(得分:0)

您应该在GridView中使用DataKeyNames:

<asp:GridView ID="GridView1" runat="server" DataKeyNames="FooID">

然后在您的代码上检索它: GridView1.DataKeys[0].Value.ToString()

其中“0”是您想要获得“FooID”的行号

答案 11 :(得分:0)

如果您不希望在列/行为空时显示数据:

if (!String.IsNullOrEmpty(item.DataName))
{
    e.Row.Visible = false;
}

答案 12 :(得分:-4)

可以通过SQL轻松完成

USE YourdatabaseName select * from TableName where Column_Name <> ''
相关问题