升序排序 ASP.NET C# Gridview 中较早出现的空白行问题

问题描述 投票:0回答:1

我正在尝试在同一网格视图中使用文本框查看/添加/更新/删除记录。页面末尾只有保存按钮。

我有一个 ASP.NET gridview,每行有 5 个文本框。 gridview的页面大小是每页20条记录。我已对每一列启用排序。当 gridview 被填充时,我们会得到 28 条填充记录和 12 条空记录。

当我在任何列上按升序模式排序时,它会显示比包含数据的记录更早的空白行。我想在排序时忽略那些空白记录。

我尝试在 gridview 上使用自定义排序方法,但它不起作用。

aspx代码

 <asp:GridView runat="server" ID="gvDetails" AllowPaging="true" PageSize="20" Allow AutoGenerateColumns="false" DataKeyNames="ProdId" OnPageIndexChanging="gvDetails_PageIndexChanging" OnSorting="gvDetails_OnSorting">
<HeaderStyle CssClass="headerstyle" />
<Columns>
<asp:TemplateField HeaderText="Product Name" SortExpression="ProdName">
<ItemTemplate>
<asp:TextBox ID="txtProductName" runat="server" Text='<%# Eval("ProdName") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Description" SortExpression="ProdDesc">
<ItemTemplate>
<asp:TextBox ID="txtProdDesc" runat="server" Text='<%# Eval("ProdDesc") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Price" SortExpression="ProdPrice">
<ItemTemplate>
<asp:TextBox ID="txtProdPrice" runat="server" Text='<%# Eval("ProdPrice") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Category" SortExpression="ProdCat">
<ItemTemplate>
<asp:TextBox ID="txtProdCat" runat="server" Text='<%# Eval("ProdCat") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Delete">
<ItemTemplate>
<asp:CheckBox ID="chkDelete" runat="server" Checked='<%# Eval("IsDelete") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGridview();
}
}

protected DataTable BindGridview()
{
DataSet ds = new DataSet();
using (SqlConnection con = new SqlConnection("#"))
{
con.Open();
SqlCommand cmd = new SqlCommand("crudoperations", con);
cmd.CommandType= CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@status","SELECT");
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
con.Close();
if (ds.Tables[0].Rows.Count > 0)
{
gvDetails.DataSource = ds;
gvDetails.DataBind();
}
else {
ds.Tables[0].Rows.Add(ds.Tables[0].NewRow());
gvDetails.DataSource = ds;
gvDetails.DataBind();
int columncount = gvDetails.Rows[0].Cells.Count;
gvDetails.Rows[0].Cells.Clear();
gvDetails.Rows[0].Cells.Add(new TableCell());
gvDetails.Rows[0].Cells[0].ColumnSpan = columncount;
gvDetails.Rows[0].Cells[0].Text = "No Records Found";
}
}
return ds.Tables[0];
}

 public void gvDetails_OnSorting(Object sender, GridViewSortEventArgs e)
{
string sortingDirection = string.Empty;  
if (direction == SortDirection.Ascending)  
{  
direction = SortDirection.Descending;  
sortingDirection = "Desc";  
  
}  
else  
{  
direction = SortDirection.Ascending;  
sortingDirection = "Asc";  
  
}  
DataView sortedView = new DataView(BindGridView());  
sortedView.Sort = e.SortExpression + " " + sortingDirection;  
gvDetails.DataSource = sortedView;  
gvDetails.DataBind();  
}
c# asp.net gridview
1个回答
0
投票

为什么不使用数据视图的“RowFilter”属性,例如:sortedView.RowFilter =“FilterExpression”?

您必须先过滤数据视图

gvDetails.DataSource = sortedView;

gvDetails.DataBind();

© www.soinside.com 2019 - 2024. All rights reserved.