如何防止在绑定期间将行添加到GridView

本文关键字:添加 GridView 何防止 绑定 | 更新日期: 2023-09-27 18:26:32

我们有一个绑定到某些数据的GridView,它看起来像这样:

RowNumber        Id                   Desc
-------------------------------------------
   1                20                  Desc1   
   2                30                  Desc2   
   3                40                  Desc3   
   4                50                  Desc4   

我使用以下代码创建RowNumber

<asp:TemplateField HeaderText="">
    <ItemTemplate>
        <asp:Label ID="lblSlNo" runat="server" Text='<% #Container.DataItemIndex + 1 %>' />
    </ItemTemplate>
    <HeaderStyle HorizontalAlign="Center" />
    <ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>

所以考虑到在数据绑定过程中,我不想显示第二行,但我想保留它的RowNumber

RowNumber        Id                   Desc
-------------------------------------------
   1                20                  Desc1   
   3                40                  Desc3   
   4                50                  Desc4   

如何防止在数据绑定期间将行添加到GridView?

如何防止在绑定期间将行添加到GridView

试试这个:

void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if (row.RowType == DataControlRowType.DataRow){
        e.Row.Visible = SomeCondition;
    }
}

someCondition在哪里检查。

最好的方法是:不要从DBMS中选择此行。

例如(在SQLServer>=2005中):

WITH cte AS(
    SELECT Id                   
           ,Desc
           ,ROW_NUMBER()OVER(Order By ID)As RowNumber
    FROM Table
)
SELECT * FROM cte
where RowNumber != 2
ORDER BY RowNumber 

http://msdn.microsoft.com/en-us/library/ms186734.aspx

OnRowDataBound是您的朋友

在ASPX文件中,为数据网格指定OnRowDataBound事件

<GridView ID="ResultsGridView" runat="server"   onRowDataBound="ResultsGridView_RowDataBound">

然后进入CS文件:

protected void ResultsGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if (e.Row.Cells[1].value)//check your value here
    {
        e.Row.Visible = false;
    }        
}

在数据库端进行

select * from 
(
select Row_Number() over(order by ID) RowNumber,        Id,   Desc
) a
where RowNumber<>2

这样尝试,您可以使用Eval调用服务器端函数,如果它返回true,则使用RowNumbe,或者为其分配空值

<asp:Label ID="lblSlNo" runat="server" Text='<%# ((Eval("yourColumn") ==SomeCondition ? (Eval(Container.DataItemIndex + 1) : Eval("")) %>'></asp:Label>