我开始设置数据库表的pid字段不是主键而且也不是自动增长,DataGrid就可以排序。现在我把pid字段设置成主键并且是自动增长,DataGrid就不能自动排序了,请大家帮忙看看,一下是代码:
- C# code
<asp:datagrid id="DGPatent" runat="server" Width="1123px" Height="40px" AutoGenerateColumns="False"AllowPaging="True" AllowSorting="True" BackColor="White" BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" CellPadding="4" GridLines="Vertical" ForeColor="Black" PageSize="20"><SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#CE5D5A"></SelectedItemStyle><AlternatingItemStyle BackColor="White"></AlternatingItemStyle><ItemStyle BackColor="#F7F7DE"></ItemStyle><HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#6B696B"></HeaderStyle><FooterStyle BackColor="#CCCC99"></FooterStyle><Columns><asp:BoundColumn DataField="pid" SortExpression="pid" HeaderText="专利序号"></asp:BoundColumn><asp:BoundColumn DataField="pno" HeaderText="专利号"></asp:BoundColumn><asp:HyperLinkColumn Target="_blank" DataNavigateUrlField="pid" DataNavigateUrlFormatString="searchcontent.aspx?pid={0}"DataTextField="pname" HeaderText="专利名称"></asp:HyperLinkColumn><asp:BoundColumn DataField="type" SortExpression="type" HeaderText="专利类别"></asp:BoundColumn><asp:BoundColumn DataField="state" SortExpression="state" HeaderText="专利状态"></asp:BoundColumn><asp:BoundColumn DataField="oprginator" HeaderText="发明人或参加人"></asp:BoundColumn><asp:BoundColumn DataField="pdate" SortExpression="pdate" HeaderText="申请日期"></asp:BoundColumn><asp:BoundColumn DataField="adate" HeaderText="授权日期"></asp:BoundColumn><asp:BoundColumn DataField="abdate" HeaderText="废止日期"></asp:BoundColumn><asp:BoundColumn DataField="ptime" HeaderText="保护期限"></asp:BoundColumn><asp:BoundColumn DataField="proposer" HeaderText="专利申请人"></asp:BoundColumn><asp:BoundColumn DataField="country" HeaderText="专利国别"></asp:BoundColumn><asp:BoundColumn DataField="unit" HeaderText="授权单位"></asp:BoundColumn><asp:BoundColumn DataField="remark" HeaderText="备注"></asp:BoundColumn></Columns><PagerStyle NextPageText="上一页" PrevPageText="下一页" HorizontalAlign="Center" ForeColor="Black"BackColor="#F7F7DE" Mode="NumericPages"></PagerStyle></asp:datagrid>
------解决方案--------------------------------------------------------
- C# code
private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 if(!IsPostBack) { ViewState["Direction"] = "ASC"; BindGrid(string.Empty); } //这两行代码有问题.因为这个所以把你的排序冲没了..这两行代码每次postback都会执行的.这样的话.你BindGrid()方法就没用了 DGPatent.DataSource=ClsDB.ExecuteQueryToDataSet("select * from patentInfo"); DGPatent.DataBind(); }
------解决方案--------------------------------------------------------
你这个排序的确有问题,你没有保存查询条件,当点击查询的时候把this.txtpno.Text 的值保存下来,排序的那个函数里要加上这个搜索的条件的,不然一排序结果就变了.帮你大概的修改了一下,具体细节还要你自己完善.
- C# code
private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 if(!IsPostBack) { ViewState["Direction"] = "ASC"; [color=#FF0000]ViewState["strWhere"]="";[/color]//保存查询条件 BindGrid(string.Empty); } DGPatent.DataSource=ClsDB.ExecuteQueryToDataSet("select * from patentInfo"); DGPatent.DataBind(); } private void BindGrid(string str) { SqlConnection cn = new SqlConnection("server=192.168.16.245;uid=sa;pwd=sa;database=patent"); string strSQL = string.Empty; if (str == string.Empty) strSQL = "select * from patentInfo "+ViewState["strWhere"]+" order by pid asc"; else strSQL = "select * from patentInfo "+ViewState["strWhere"]+" order by " + str + " " + ViewState["Direction"].ToString(); SqlDataAdapter da = new SqlDataAdapter(strSQL , cn); DataSet ds = new DataSet(); cn.Open(); da.Fill(ds); cn.Close(); DGPatent.DataSource = ds; DGPatent.DataKeyField = "pid"; DGPatent.DataBind(); } private void btnSelect_Click(object sender, System.Web.UI.ImageClickEventArgs e) {//[color=#FF0000]下面做了部分调整,不知道你书不是这个意思.[/color] string sql="select * from patentInfo "; string strWhere=" where 1=1 "; if(this.txtpno.Text!="") { strWhere+=" and pno like '%" + this.txtpno.Text + "%'"; } if(this.txtpname.Text!="") { strWhere+=" and pname like '%" + this.txtpname.Text + "%'"; } if(this.ddlpstate.SelectedValue!="--请选择--") { strWhere+=" and state like '%" + this.ddlpstate.SelectedValue + "%'"; } if(this.txtkey.Text!="") { strWhere+=" and pno like '%" + this.txtkey.Text + "%' or pname like'%"+ this.txtkey.Text +"%' or iname like '%" + txtkey.Text + "%' or unit like '%" + txtkey.Text + "%' or oprginator like '%" + txtkey.Text + "%' or remark like '%" + txtkey.Text + "%'"; } DGPatent.DataSource=ClsDB.ExecuteQueryToDataSet(sql); DGPatent.DataBind(); [color=#FF0000]ViewState["strWhere"]=strWhere;[/color]//保存查询条件 }