如何在AspxGridView中安排FieldName?

时间:2017-01-04 07:22:47

标签: c# asp.net gridview aspxgridview

我想安排用户想要显示的字段名称。我没有使用SqlDataSource。我通过如下编程调用存储过程。

string cs = ConfigurationManager.ConnectionStrings["HQMatajerConnectionString"].ConnectionString;

using (SqlConnection con = new SqlConnection(cs))
{
   SqlCommand cmd = new SqlCommand("spGetTotalSalesQuantity",con);
   cmd.CommandType = System.Data.CommandType.StoredProcedure;
   cmd.Parameters.AddWithValue("@DateFrom", DateFromStr);
   cmd.Parameters.AddWithValue("@DateTo", DateToStr);
   //cmd.Parameters.AddWithValue("@DateFrom", "2015-01-01 00:00:00");
   //cmd.Parameters.AddWithValue("@DateTo", "2015-12-31 23:59:59");

   con.Open();

   SqlDataAdapter sda = new SqlDataAdapter(cmd);
   sda.Fill(ds);

   ASPxGridView1.DataSource = ds;
   ASPxGridView1.DataBind();
}

结果,我可以看到字段名称我在查询中给出了Column_name的方式。但是,用户希望看到字段名称如何排列。

例如:

select 
    student_id,student_name ,Class,School_Name
From
    Student_Details

如果上面是我的存储过程。我将获得我在查询中提到的字段名称。

但是用户希望看到他们给出的结果。如果用户提供School_Name,Class,Student_id,School_Name

无论如何要安排在AspxGridView中?

2 个答案:

答案 0 :(得分:1)

检查我的答案根据我对这个问题的理解和@ mohamed的评论。

尝试使用DataColumn.SetOrdinal方法。例如:

con.Open();

   SqlDataAdapter sda = new SqlDataAdapter(cmd);
   sda.Fill(ds);

   ds.Tables[0].Columns["School_Name"].SetOrdinal(0);
   ds.Tables[0].Columns["Class"].SetOrdinal(1); 
   ds.Tables[0].Columns["Student_id"].SetOrdinal(2);
   ds.Tables[0].Columns["School_Name"].SetOrdinal(3); 

   ASPxGridView1.DataSource = ds;
   ASPxGridView1.DataBind();

即使用户更改了select语句,列的顺序也不会改变。

答案 1 :(得分:0)

  1. 使用hiddentext字段并获取用户希望以哪种顺序显示的列名。

    string selectedColumns = HiddentxtSelectedColumn.Value;

  2. selectedColumns移至数组

    string[] names = selectedColumns.Split(',');
    sda.Fill(ds);
    
    for (int i = 0; i < names.Length; i++)
    {
        ds.Tables[0].Columns[names[i]].SetOrdinal(i);`
    }
    
    ASPxGridView1.DataSource = ds;
    ASPxGridView1.DataBind();
    
  3. 现在它将完全运行。