Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何防止绑定期间向GridView添加行_C#_Asp.net_C# 4.0_Gridview - Fatal编程技术网

C# 如何防止绑定期间向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

我们有一个绑定到某些数据的GridView,它如下所示:

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,但他想确保即使缺少行,也能正确计算行号。这就是我的答案。