GridView的排序不工作 [英] sort Gridview doesn't work
本文介绍了GridView的排序不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有asp.net页面包含的GridView如下
< ASP:GridView控件ID =GridView1=服务器AllowPaging =真
OnPageIndexChanging =gridView_PageIndexChanging
OnSorting =TaskGridView_Sorting
AllowSorting =真的AutoGenerateColumns =FALSE
onselectedindexchanged =GridView1_SelectedIndexChanged
背景色=#DEBA84BORDERCOLOR =#DEBA84边框=无边框宽度=1像素
CELLPADDING =3CELLSPACING =2>
< RowStyle的BackColor =#FFF7E7前景色=#8C4510/>
<柱体和GT;
< ASP:BoundField的数据字段=name_englishconvertemptystringtonull =真HEADERTEXT =名称/>
< ASP:BoundField的数据字段=Inc_IDconvertemptystringtonull =真的HeaderText =Inc_IDSORTEX pression =Inc_ID/>
< ASP:BoundField的数据字段=UID的HeaderText =Study_UIDSORTEX pression =UID/>
< /专栏>
< FooterStyle背景色=#F7DFB5前景色=#8C4510/>
< PagerStyle前景色=#8C4510HorizontalAlign =中心/>
< SelectedRowStyle背景色=#738A9CFONT-粗体=真前景色=白/>
< HeaderStyle背景色=#A55129FONT-粗体=真前景色=白/>
< / ASP:GridView的>
我填写,并使用以下code的顺序来排序
保护无效的button1_Click(对象发件人,EventArgs的发送)
{
//连接数据库
字符串连接= System.Configuration.ConfigurationManager.ConnectionStrings[\"NorthindConnectionString\"].ConnectionString;
的SqlConnection的myconn =新的SqlConnection(连接);
myConn.Open();
CMD的SqlCommand =新的SqlCommand(工作表的myconn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(新的SqlParameter(@名,TextBox1.Text));
cmd.Parameters.Add(新的SqlParameter(@ ID中,TextBox2.Text));
cmd.Parameters.Add(新的SqlParameter(@ ACCNO,TextBox4.Text));
SqlDataAdapter的大=新SqlDataAdapter的(CMD);
DataSet的DS =新的DataSet();
da.Fill(DS);
GridView1.DataSource = DS;
GridView1.DataBind(); 会话[TaskTable] = ds.Tables [0]; ds.Dispose();
da.Dispose();
GridView1.Visible = TRUE; myConn.Close();
}
保护无效TaskGridView_Sorting(对象发件人,GridViewSortEventArgs E)
{ //从session对象检索表。
DataTable的DT =会话[TaskTable]作为数据表; 如果(DT!= NULL)
{ //排序的数据。
dt.DefaultView.Sort = e.SortEx pression ++ GetSortDirection(e.SortEx pression);
GridView1.DataSource =会话[TaskTable];
GridView1.DataBind();
} } 私人字符串GetSortDirection(字符串列)
{ //默认情况下,设置排序方向上升。
字符串sortDirection =ASC; //检索进行了排序最后一列。
字符串SORTEX pression =的ViewState [SORTEX pression]作为字符串; 如果(SORTEX pression!= NULL)
{
//检查同一列进行排序。
//否则,可以返回默认值。
如果(SORTEX pression ==列)
{
字符串lastDirection =的ViewState [SortDirection]作为字符串;
如果((lastDirection = NULL)及!及(lastDirection ==ASC))
{
sortDirection =DESC;
}
}
} //在ViewState中保存新值。
的ViewState [SortDirection] = sortDirection;
的ViewState [SORTEX pression] =列; 返回sortDirection;
}
}
问题的时候点击任何头进行排序引发错误System.IndexOutOfRangeException:无法找到列名..,任何想法来解决这个问题,我是从列名在数据库中,
确定解决方案
私人字符串ConvertSortDirectionToSql(SortDirection sortDirection)
{
字符串newSortDirection =的String.Empty; 开关(sortDirection)
{
案例SortDirection.Ascending:
newSortDirection =ASC;
打破; 案例SortDirection.Descending:
newSortDirection =DESC;
打破;
} 返回newSortDirection;
}
保护无效gridView_Sorting(对象发件人,GridViewSortEventArgs E)
{
DataTable中的dataTable = gridView.DataSource的数据表; 如果(dataTable的!= NULL)
{
数据视图数据视图=新的数据视图(dataTable的);
dataView.Sort = e.SortEx pression ++ ConvertSortDirectionToSql(e.SortDirection); gridView.DataSource =数据视图;
gridView.DataBind();
}
}
试试这个code ..
I have asp.net page contain gridview as following
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
OnPageIndexChanging="gridView_PageIndexChanging"
OnSorting="TaskGridView_Sorting"
AllowSorting="True" AutoGenerateColumns="False"
onselectedindexchanged="GridView1_SelectedIndexChanged"
BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px"
CellPadding="3" CellSpacing="2">
<RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
<Columns>
<asp:boundfield datafield="name_english" convertemptystringtonull="true" headertext="Name"/>
<asp:BoundField DataField="Inc_ID" convertemptystringtonull="true" HeaderText="Inc_ID" SortExpression="Inc_ID"/>
<asp:BoundField DataField="UID" HeaderText="Study_UID" SortExpression= "UID"/>
</Columns>
<FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
<PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
</asp:GridView>
I fill and sort it using the following code
protected void Button1_Click(object sender, EventArgs e)
{
//connection to database
string connection = System.Configuration.ConfigurationManager.ConnectionStrings["NorthindConnectionString"].ConnectionString;
SqlConnection myConn = new SqlConnection(connection);
myConn.Open();
SqlCommand cmd = new SqlCommand(" WorkList", myConn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Name", TextBox1.Text));
cmd.Parameters.Add(new SqlParameter("@ID", TextBox2.Text));
cmd.Parameters.Add(new SqlParameter("@AccNo", TextBox4.Text));
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
Session["TaskTable"] = ds.Tables[0];
ds.Dispose();
da.Dispose();
GridView1.Visible = true;
myConn.Close();
}
protected void TaskGridView_Sorting(object sender, GridViewSortEventArgs e)
{
//Retrieve the table from the session object.
DataTable dt = Session["TaskTable"] as DataTable;
if (dt != null)
{
//Sort the data.
dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
GridView1.DataSource = Session["TaskTable"];
GridView1.DataBind();
}
}
private string GetSortDirection(string column)
{
// By default, set the sort direction to ascending.
string sortDirection = "ASC";
// Retrieve the last column that was sorted.
string sortExpression = ViewState["SortExpression"] as string;
if (sortExpression != null)
{
// Check if the same column is being sorted.
// Otherwise, the default value can be returned.
if (sortExpression == column)
{
string lastDirection = ViewState["SortDirection"] as string;
if ((lastDirection != null) && (lastDirection == "ASC"))
{
sortDirection = "DESC";
}
}
}
// Save new values in ViewState.
ViewState["SortDirection"] = sortDirection;
ViewState["SortExpression"] = column;
return sortDirection;
}
}
the problem when click on any header for sorting raise error System.IndexOutOfRangeException: Cannot find column name .. , any idea to solve that , I am sure from the columns name in database ,
解决方案
private string ConvertSortDirectionToSql(SortDirection sortDirection)
{
string newSortDirection = String.Empty;
switch (sortDirection)
{
case SortDirection.Ascending:
newSortDirection = "ASC";
break;
case SortDirection.Descending:
newSortDirection = "DESC";
break;
}
return newSortDirection;
}
protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dataTable = gridView.DataSource as DataTable;
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);
gridView.DataSource = dataView;
gridView.DataBind();
}
}
try this code..
这篇关于GridView的排序不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文