如何防止在绑定期间将行添加到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?
试试这个:
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>