C# 如何防止绑定期间向GridView添加行
我们有一个绑定到某些数据的GridView,它如下所示:C# 如何防止绑定期间向GridView添加行,c#,asp.net,c#-4.0,gridview,C#,Asp.net,C# 4.0,Gridview,我们有一个绑定到某些数据的GridView,它如下所示: RowNumber Id Desc ------------------------------------------- 1 20 Desc1 2 30 Desc2 3 40
RowNumber Id Desc
-------------------------------------------
1 20 Desc1
2 30 Desc2
3 40 Desc3
4 50 Desc4
RowNumber Id Desc
-------------------------------------------
1 20 Desc1
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>
如何防止在数据绑定期间向GridView添加行?尝试以下方法:
void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if (row.RowType == DataControlRowType.DataRow){
e.Row.Visible = SomeCondition;
}
}
您要检查的是什么条件。尝试以下方法:
void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if (row.RowType == DataControlRowType.DataRow){
e.Row.Visible = SomeCondition;
}
}
在某些条件下进行检查。最好的方法是:不要从DBMS中选择此行 例如,在SQL Server>=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
最好的方法是:不要从DBMS中选择此行 例如,在SQL Server>=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
你的朋友在吗
在ASPX文件中,为datagrid指定OnRowDataBound事件
<GridView ID="ResultsGridView" runat="server" onRowDataBound="ResultsGridView_RowDataBound">
你的朋友在吗
在ASPX文件中,为datagrid指定OnRowDataBound事件
<GridView ID="ResultsGridView" runat="server" onRowDataBound="ResultsGridView_RowDataBound">
让它在数据库端
select * from
(
select Row_Number() over(order by ID) RowNumber, Id, Desc
) a
where RowNumber<>2
让它在数据库端
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>
尝试这样做,您可以使用Eval调用服务器端函数,如果它返回true,则使用RowNumbe,或者为其指定空值
<asp:Label ID="lblSlNo" runat="server" Text='<%# ((Eval("yourColumn") ==SomeCondition ? (Eval(Container.DataItemIndex + 1) : Eval("")) %>'></asp:Label>
最简单的方法是不从您的dbms中选择它。是的,但我希望如何保持RowNumber。如果我不选择它,我的RowNumber将不正确最简单的方法是不从您的dbms中选择它。是的,但我希望如何保持RowNumber。如果我不选择它,我的RowNumber将不正确,我不会去那里。有时数据库端脚本无法更改。或者,您需要根据用户操作显示相同的数据集。问题中还有一个条件,就是仍然需要身份证。我不会去那里。有时数据库端脚本无法更改。或者,您需要根据用户操作显示相同的数据集。这也是问题中仍然需要ID的一个条件。很好!无论如何,从数据源中提取未使用的行是一种不好的做法,因为这会浪费性能。Tim Schmelter的解决方案更适合在SQL层上检查您的条件。很好!无论如何从数据源中提取未使用的行是一种不好的做法,因为这会浪费性能。Tim Schmelter的解决方案更适合在SQL层上检查您的条件。问题有一个条件-保留隐藏行的ID。@Trailmax:OP不想保留ID,但他想确保即使缺少行,也会正确计算RowNumber。这就是我的答案。问题有一个条件-保留隐藏行的ID。@Trailmax:OP不想保留ID,但他想确保即使缺少行,也能正确计算行号。这就是我的答案。