c#datagridview排序 我想在一个form里添加几排序按钮对DataGridView或DataTable进行排序,datagridview默认的排序方式是以升序,想点击按钮时是以降序排列,而且还可以取消排序状态,如何设置? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在不同的按钮事件中,分别对绑定的数据源,使用不同排序方法的’SQL‘语句即可。 排序可以调用 DataGridView 的排序函数voidSort ( DataGridViewColumn dataGridViewColumn, ListSortDirection direction)来进行对于取消排序, 可以使用 BindingSource 来作为媒介,BindingSource 有个 RemoveSort 调用. protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ViewState["SortOrder"] = "身份证号码"; ViewState["OrderDire"] = "ASC"; bind(); } } protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { string sPage = e.SortExpression; if (ViewState["SortOrder"].ToString() == sPage) { if (ViewState["OrderDire"].ToString() == "Desc") ViewState["OrderDire"] = "ASC"; else ViewState["OrderDire"] = "Desc"; } else { ViewState["SortOrder"] = e.SortExpression; } bind(); } public void bind() { string sqlstr = "select top 5 * from 飞狐工作室"; sqlcon = new SqlConnection(strCon); SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon); DataSet myds = new DataSet(); sqlcon.Open(); myda.Fill(myds, "飞狐工作室"); DataView view = myds.Tables["飞狐工作室"].DefaultView; string sort = (string)ViewState["SortOrder"] + " " + (string)ViewState["OrderDire"]; view.Sort = sort; GridView1.DataSource = view; GridView1.DataBind(); sqlcon.Close(); }}前台主要代码:<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" CellPadding="3" Font-Size="9pt" OnSorting="GridView1_Sorting" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px"> <FooterStyle BackColor="White" ForeColor="#000066" /> <Columns> <asp:BoundField DataField="身份证号码" HeaderText="用户ID" SortExpression="身份证号码" /> <asp:BoundField DataField="姓名" HeaderText="用户姓名" SortExpression="姓名"/> <asp:BoundField DataField="员工性别" HeaderText="性别" SortExpression="员工性别"/> <asp:BoundField DataField="家庭住址" HeaderText="家庭住址" SortExpression="家庭住址"/> </Columns> <RowStyle ForeColor="#000066" /> <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" /> <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" /> </asp:GridView>该文章转载自德仔工作室:http://www.dezai.cn/Article_Show.asp?ArticleID=15602&ArticlePage=2 非常同意楼上两位点击升序排序按钮的时候在SQL语句加上 where order by 字段 des点击降序排序按钮的时候在SQL语句加上 where order by 字段 asc点击取消按钮的时候,去掉where后的条件语句 单击列排序http://www.cnblogs.com/h2appy/archive/2008/12/10/1348602.html 建议您使用DataView(数据视图)对象,此对象能对DataSet里的数据进行排序。它有两个很有用的方法:Sort()排序方法和RowsFilter(筛选)属性.您可以写一个方法,此方法的返回类型是DataView类型的。方法代码部分示例://创建DataView对象DataView 对象名=new DataView();//指定排序方式对象名.Sort()=“列名 DESC/ASC”; /// <summary> /// 在单击某个用于对列进行排序的超链接时发生,但在 GridView 控件执行排序操作之前。此事件通常用于取消排序操作或执行自定义的排序例程。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { string sPage = e.SortExpression; if (ViewState["SortOrder"].ToString() == sPage) { if (ViewState["OrderDire"].ToString() == "DESC") ViewState["OrderDire"] = "ASC"; else ViewState["OrderDire"] = "DESC"; } else { ViewState["SortOrder"] = e.SortExpression; } bind(); } dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Descending); region//自定义编程排序方式 if (e.Button == MouseButtons.Left && this.Columns[e.ColumnIndex].SortMode == DataGridViewColumnSortMode.Programmatic) { // 检查已经排序的列 DataGridViewColumn newColumn = this.Columns[e.ColumnIndex]; DataGridViewColumn oldColumn = this.SortedColumn; ListSortDirection direction; // 判断排序方式 if (oldColumn != null) { if (oldColumn == newColumn && this.SortOrder == SortOrder.Ascending) { direction = ListSortDirection.Descending; } else { direction = ListSortDirection.Ascending; oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None; } } else { direction = ListSortDirection.Ascending; } // 排序 if (newColumn != null) { SortedList<string, DataGridViewCellStyle> st1 = new SortedList<string, DataGridViewCellStyle>(); SortedList<string, int> rowheight = new SortedList<string, int>(); SortedList<string, bool> rowSelected = new SortedList<string, bool>(); foreach (DataGridViewRow row in this.Rows) { string guid = null; foreach (DataGridViewColumn col in this.Columns) { guid += row.Cells[col.Name].Value.ToString(); } st1.Add(guid, row.DefaultCellStyle.Clone()); rowheight.Add(guid, row.Height); rowSelected.Add(guid, row.Selected); } this.Sort(newColumn, direction); //图标 newColumn.HeaderCell.SortGlyphDirection =direction == ListSortDirection.Ascending ? SortOrder.Ascending : SortOrder.Descending; //重新绑定外观 //this.DefaultCellStyle = st0; foreach (DataGridViewRow row in this.Rows) { string guid = null; foreach (DataGridViewColumn col in this.Columns) { guid += row.Cells[col.Name].Value.ToString(); }row.DefaultCellStyle = st1[guid]; row.Height = rowheight[guid]; C#关于windows form的dialogresult的问题 求编程高手 ●●●DSOFramer问题 急!急!急! login控件问题! 关于timer的问题 关于winform的考试系统中的题目录入问题(C#) 请帮忙看一下为什么赋值总是出错? 用C# webbrowser 做一个上传新浪微博头像的软件,后台运行! 请问:如何在Internet实现QQ或MSN上点对点文件传输功能?在线等待... SqlCommandBuilder 报错 random.next()的范围越大,越容易抛到0,真是奇了怪了 数据输入问题。。求助
Sort (
DataGridViewColumn dataGridViewColumn,
ListSortDirection direction
)来进行对于取消排序, 可以使用 BindingSource 来作为媒介,
BindingSource 有个 RemoveSort 调用.
{
if (!IsPostBack)
{
ViewState["SortOrder"] = "身份证号码";
ViewState["OrderDire"] = "ASC";
bind();
}
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
string sPage = e.SortExpression;
if (ViewState["SortOrder"].ToString() == sPage)
{
if (ViewState["OrderDire"].ToString() == "Desc")
ViewState["OrderDire"] = "ASC";
else
ViewState["OrderDire"] = "Desc";
}
else
{
ViewState["SortOrder"] = e.SortExpression;
}
bind();
} public void bind()
{
string sqlstr = "select top 5 * from 飞狐工作室";
sqlcon = new SqlConnection(strCon);
SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
DataSet myds = new DataSet();
sqlcon.Open();
myda.Fill(myds, "飞狐工作室");
DataView view = myds.Tables["飞狐工作室"].DefaultView;
string sort = (string)ViewState["SortOrder"] + " " + (string)ViewState["OrderDire"];
view.Sort = sort;
GridView1.DataSource = view;
GridView1.DataBind();
sqlcon.Close();
}
}前台主要代码:
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False"
CellPadding="3" Font-Size="9pt" OnSorting="GridView1_Sorting" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px">
<FooterStyle BackColor="White" ForeColor="#000066" />
<Columns>
<asp:BoundField DataField="身份证号码" HeaderText="用户ID" SortExpression="身份证号码" />
<asp:BoundField DataField="姓名" HeaderText="用户姓名" SortExpression="姓名"/>
<asp:BoundField DataField="员工性别" HeaderText="性别" SortExpression="员工性别"/>
<asp:BoundField DataField="家庭住址" HeaderText="家庭住址" SortExpression="家庭住址"/>
</Columns>
<RowStyle ForeColor="#000066" />
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
</asp:GridView>
该文章转载自德仔工作室:http://www.dezai.cn/Article_Show.asp?ArticleID=15602&ArticlePage=2
点击升序排序按钮的时候在SQL语句加上 where order by 字段 des
点击降序排序按钮的时候在SQL语句加上 where order by 字段 asc
点击取消按钮的时候,去掉where后的条件语句
http://www.cnblogs.com/h2appy/archive/2008/12/10/1348602.html
//创建DataView对象
DataView 对象名=new DataView();
//指定排序方式
对象名.Sort()=“列名 DESC/ASC”;
/// 在单击某个用于对列进行排序的超链接时发生,但在 GridView 控件执行排序操作之前。此事件通常用于取消排序操作或执行自定义的排序例程。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
string sPage = e.SortExpression;
if (ViewState["SortOrder"].ToString() == sPage)
{
if (ViewState["OrderDire"].ToString() == "DESC")
ViewState["OrderDire"] = "ASC";
else
ViewState["OrderDire"] = "DESC";
}
else
{
ViewState["SortOrder"] = e.SortExpression;
}
bind();
}
if (e.Button == MouseButtons.Left && this.Columns[e.ColumnIndex].SortMode == DataGridViewColumnSortMode.Programmatic)
{
// 检查已经排序的列
DataGridViewColumn newColumn = this.Columns[e.ColumnIndex];
DataGridViewColumn oldColumn = this.SortedColumn;
ListSortDirection direction; // 判断排序方式
if (oldColumn != null)
{
if (oldColumn == newColumn &&
this.SortOrder == SortOrder.Ascending)
{
direction = ListSortDirection.Descending;
}
else
{
direction = ListSortDirection.Ascending;
oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None;
}
}
else
{
direction = ListSortDirection.Ascending;
} // 排序
if (newColumn != null)
{
SortedList<string, DataGridViewCellStyle> st1 = new SortedList<string, DataGridViewCellStyle>();
SortedList<string, int> rowheight = new SortedList<string, int>();
SortedList<string, bool> rowSelected = new SortedList<string, bool>();
foreach (DataGridViewRow row in this.Rows)
{
string guid = null;
foreach (DataGridViewColumn col in this.Columns)
{
guid += row.Cells[col.Name].Value.ToString();
}
st1.Add(guid, row.DefaultCellStyle.Clone());
rowheight.Add(guid, row.Height);
rowSelected.Add(guid, row.Selected);
} this.Sort(newColumn, direction);
//图标
newColumn.HeaderCell.SortGlyphDirection =direction == ListSortDirection.Ascending ?
SortOrder.Ascending : SortOrder.Descending;
//重新绑定外观
//this.DefaultCellStyle = st0;
foreach (DataGridViewRow row in this.Rows)
{
string guid = null;
foreach (DataGridViewColumn col in this.Columns)
{
guid += row.Cells[col.Name].Value.ToString();
}row.DefaultCellStyle = st1[guid];
row.Height = rowheight[guid];