我有這個網格視圖,它有2個問題。無法按排序排序gridview,也不能在另一列排序?
- 如果我通過單擊列對其進行排序,然後再次單擊它,但不按排序順序排序。
如果有一次我與
col A
排序,然後點擊任何其他列,它不會再排序?<asp:GridView ID="grdReport" runat="server" AutoGenerateColumns="False" DataKeyNames="CustCode" ShowFooter="True" EmptyDataText="No record found" PageSize="50" CssClass="mGrid" onrowdatabound="grdReport_RowDataBound" AllowSorting="True" onsorting="grdReport_Sorting"> <Columns> <asp:TemplateField HeaderText="Select"> <ItemTemplate> <asp:CheckBox ID="chkSelect" runat="server"/> </ItemTemplate> </asp:TemplateField> <asp:TemplateField Visible="false"> <ItemTemplate> <asp:Label ID="lblCustCodes" runat="server" Text='<%# Eval("CustCode") %>' CssClass="grdCustName"></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Customer" SortExpression="Customer"> <ItemTemplate> <asp:HyperLink Target="_blank" Text='<%# Eval("CustomerName") %>' runat="server" ID="hplNavigate"> </asp:HyperLink> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="QTY" HeaderText="Booked Qty" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right" SortExpression="QTY"> <FooterStyle HorizontalAlign="Right" /> <ItemStyle HorizontalAlign="Right"></ItemStyle> </asp:BoundField> <asp:BoundField DataField="Volume" HeaderText="Booked Amt" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right" SortExpression="Volume"> <FooterStyle HorizontalAlign="Right" /> <ItemStyle HorizontalAlign="Right"></ItemStyle> </asp:BoundField> </asp:BoundField> <asp:BoundField DataField="FirstBill" HeaderText="First Bill" HeaderStyle-HorizontalAlign="left" ItemStyle-HorizontalAlign="left" SortExpression="FirstBill"> <FooterStyle HorizontalAlign="Left" /> <ItemStyle HorizontalAlign="Left"></ItemStyle> </asp:BoundField> </Columns> <FooterStyle BackColor="Aqua" Font-Bold="true" ForeColor="BlueViolet"/>
背後排序的代碼是
switch (e.SortExpression)
{
case "Customer":
if (e.SortDirection == SortDirection.Ascending)
{
var result = from table in Ob.DataTableOther.AsEnumerable()
orderby table.Field<string>("CustomerName")
select table;
var dv = result.AsDataView();
grdReport.DataSource = dv;
grdReport.DataBind();
}
else
{
var result = from table in Ob.DataTableOther.AsEnumerable()
orderby table.Field<string>("CustomerName") descending
select table;
var dv = result.AsDataView();
grdReport.DataSource = dv;
grdReport.DataBind();
}
break;
case "QTY":
if (e.SortDirection == SortDirection.Ascending)
{
var result = from table in Ob.DataTableOther.AsEnumerable()
orderby table.Field<int>("Qty")
select table;
var dv = result.AsDataView();
grdReport.DataSource = dv;
grdReport.DataBind();
}
else
{
var result = from table in Ob.DataTableOther.AsEnumerable()
orderby table.Field<int>("Qty") descending
select table;
var dv = result.AsDataView();
grdReport.DataSource = dv;
grdReport.DataBind();
}
break;
case "Volume":
if (e.SortDirection == SortDirection.Ascending)
{
var result = from table in Ob.DataTableOther.AsEnumerable()
orderby table.Field<float>("Volume")
select table;
var dv = result.AsDataView();
grdReport.DataSource = dv;
grdReport.DataBind();
}
else
{
var result = from table in Ob.DataTableOther.AsEnumerable()
orderby table.Field<float>("Volume") descending
select table;
var dv = result.AsDataView();
grdReport.DataSource = dv;
grdReport.DataBind();
}
break;
case "FirstBill":
if (e.SortDirection == SortDirection.Ascending)
{
var result = from table in Ob.DataTableOther.AsEnumerable()
orderby table.Field<DateTime>("FirstBill")
select table;
var dv = result.AsDataView();
grdReport.DataSource = dv;
grdReport.DataBind();
}
else
{
var result = from table in Ob.DataTableOther.AsEnumerable()
orderby table.Field<DateTime>("FirstBill") descending
select table;
var dv = result.AsDataView();
grdReport.DataSource = dv;
grdReport.DataBind();
}
break;
default:
break;
}
和行數據綁定事件是
protected void grdReport_RowDataBound(object sender, GridViewRowEventArgs e)
{
# region try
try
{
if (e.Row.RowType == DataControlRowType.DataRow && Ob.DatasetMain.Tables[0].Rows.Count != 0)
{
if ((Ob.FromDate != null || Ob.FromDate != "") && (Ob.UptoDate != null || Ob.UptoDate != ""))
{
((HyperLink)e.Row.Cells[2].FindControl("hplNavigate")).NavigateUrl =
String.Format("~//Reports/BookingByCustomerReport.aspx?BC={0},{1},{2},{3}", Ob.DatasetMain.Tables[0].Rows[Ob.Counter][0], Ob.FromDate, Ob.UptoDate, radReportFrom.Checked);
Ob.Counter++;
}
if (hdnFromCustomer.Value == "true")
{
((CheckBox)e.Row.Cells[0].FindControl("chkSelect")).Checked = true;
}
}
if (e.Row.RowType == DataControlRowType.Footer)
{
if (Ob.DatasetOther.Tables[0].Rows.Count != 0)
{
e.Row.Cells[2].Text = "Total";
e.Row.Cells[3].Text = Ob.DatasetOther.Tables[0].Rows[Ob.DatasetOther.Tables[0].Rows.Count - 1][2].ToString();
e.Row.Cells[4].Text = Ob.DatasetOther.Tables[0].Rows[Ob.DatasetOther.Tables[0].Rows.Count - 1][3].ToString();
e.Row.Cells[5].Text = Ob.DatasetOther.Tables[0].Rows[Ob.DatasetOther.Tables[0].Rows.Count - 1][4].ToString();
e.Row.Cells[6].Text = Ob.DatasetOther.Tables[0].Rows[Ob.DatasetOther.Tables[0].Rows.Count - 1][5].ToString();
}
}
}
# endregion
catch (Exception ex)
{ }
}
要再次列出問題
- 我不能排序DES當我再次點擊
- 如果我搜索結果排序方式說,客戶名稱,然後單擊
qty
或任何其他我得到Specified cast is not valid.
手段,我無法通過一次單擊任何其他列理清我按任何特定的列排序。
任何人都可以幫我找出問題嗎?
你可能想改變'Session [「sortExpression」]'ViewState [「sortExpression」]' – naveen