【发布时间】:2014-05-12 13:21:02
【问题描述】:
在我的应用程序中,我正在对 gridview 进行排序,并且在该 gridview 中也有 Edit,排序工作正常,但是当我单击 Edit 时,它会将 gridview 置于原始排序顺序中。当我单击“编辑”时 - 它允许我编辑该行,但它会更改顺序并在编辑模式下向我显示该行的原始记录。
private void LoadGridview()
{
DataTable dt = new DataTable();
using (SqlConnection cs = new SqlConnection(connStr))
{
if (Session["sortedGV"] == null )
{
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter("spManagement_GetStationProfile", cs);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.AddWithValue("@Que", ddlQue.SelectedValue);
da.Fill(ds);
dt = ds.Tables[0];
Session["sortedGV"] = new DataView(dt);
}
}
gvStations.DataSource = Session["sortedGV"];
gvStations.DataBind();
}
protected void gvStations_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "EditRow")
{
//This enables the EditTemplate
int rowindex = ((GridViewRow)((LinkButton)e.CommandSource).NamingContainer).RowIndex;
gvStations.EditIndex = rowindex; //Enables the edit row in gridview
}
else if (e.CommandName == "CancelUpdate")
{
gvStations.EditIndex = -1;
}
else if (e.CommandName == "UpdateRow")
{
//DO SOME STUFF///
gvStations.EditIndex = -1; //Takes you out of update view
}
if ((DataTable)Session["sortedGV"] != null)
{
gvStations.DataSource = (DataTable)Session["sortedGV"];
}
else
{
gvStations.DataSource = LoadGridview();
}
gvStations.DataBind();
btnAddStation.Visible = true;
}
private void SortGridview(string sortExpression, string Direction)
{
DataView dv = null;
DataTable dt = gvStations.DataSource as DataTable;
dv = new DataView(dt);
dv.Sort = sortExpression + " " + Direction;
Session["sortedGV"] = dt;
gvStations.DataSource = dv;
gvStations.DataBind();
}
//Sorts gridview
protected void gvStations_Sorting(object sender, GridViewSortEventArgs e)
{
String sortExpression = e.SortExpression;
Session["SortExpression"] = sortExpression;
if (Session["SortDirection"] != null && Session["SortDirection"].ToString() == SortDirection.Descending.ToString())
{
Session["SortDirection"] = SortDirection.Ascending;
SortGridview(sortExpression, "ASC");
}
else
{
Session["SortDirection"] = SortDirection.Descending;
SortGridview(sortExpression, "DESC");
}
}
网格视图
<asp:GridView ID="gvStations" runat="server" AutoGenerateColumns="False" DataKeyNames="StationID"
Width="100%" AllowSorting="True" CellPadding="4" ForeColor="#333333" GridLines="None"
OnRowCommand="gvStations_RowCommand" OnSorting="gvStations_Sorting">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="lbEdit" runat="server" CausesValidation="False" CommandName="EditRow"
CommandArgument='<%# Eval("StationId")%>'>Edit</asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="lbUpdate" runat="server" CausesValidation="True" CommandName="UpdateRow"
ForeColor="White" Text="Update" CommandArgument='<%# Eval("StationId")%>'></asp:LinkButton>
<asp:LinkButton ID="lbCancel" runat="server" CausesValidation="False" CommandName="CancelUpdate"
ForeColor="White" CommandArgument='<%# Eval("StationId")%>' Text="Cancel"></asp:LinkButton>
</EditItemTemplate>
<FooterStyle HorizontalAlign="Center" />
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:BoundField DataField="StationID" HeaderText="ID" SortExpression="StationID"
Visible="false" ReadOnly="true">
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<%--Station Number--%>
<asp:TemplateField HeaderText="#" SortExpression="StationNumber">
<EditItemTemplate>
<asp:TextBox ID="tbStationNumberEdit" runat="server" Text='<%# Eval("StationNumber") %>' />
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lbStationNumber" runat="server" Text='<%# Eval("StationNumber") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
【问题讨论】:
-
将 gvStations_RowCommand 中的数据绑定代码移到顶部或将其全部删除时会发生什么?
-
它的排序很好。但是当我单击编辑时,它会重新排序为升序,而不是保持降序。
-
您可以发布 GridView 标记以便我自己进行设置吗?