ASPxGridView的資料繫結顯示

老Nice發表於2015-09-02
近日跟著做了一個專案,用到了很多次ASPxGridView,以下是對繫結資料及對資料處理的總結。
繫結方法一下幾種:首先拖入ASPxGridView控制元件(控制元件ID為ASPxGridView1)
新增Columns, 設定FieldName 
A,B,C
1.這種方法適合簡單的ASPxGridView的顯示
       先建立個DataTable dt=new DataTable();

       dt中是從資料庫中查詢到的資料例如select A,B,C from tablename
        ASPxGridView1.DataSource = dt;
        ASPxGridView1.DataBind();
        ASPxGridView1.KeyFieldName = "keyfield";//設定KeyFieldName之後才能對其做相關的操作。

這樣查詢到的dt和ASPxGridView1中的Columns中的列是對應的,直接繫結就行,SQL語句中的列名要和新增Columns時候設定的FieldName相同才能繫結的上去。

但是有時候直接獲取符合ASPxGridView中的列的SQL語句較有難度就推薦下方的方法2。


2.這樣的適合比較複雜的GridView

建立兩個DataTable dt1=new DataTable(); DataTable dt2=new DataTable();

ASPxGridView1 中的列來自不同的表 例如其中有5列 A,B,C,D,E,A,B,C列來自表table1,列D,E來自表table2

(table1 中列為ABC  table2中表為ADE,其中table1.A與table2.A相關)

dt1中存從資料庫table1中查詢到的資訊。得到dt1中包含(ABC)

dt2建立為和ASPxGridView所要求的列一樣的DataTable,即列為A,B,C,D,E的DataTable

建立方法如下

typeof(型別)可以選擇為需要的型別
        dt2.Columns.Add("A", typeof(String));
        dt2.Columns.Add("B", typeof(String));
        dt2.Columns.Add("C", typeof(String));
        dt2.Columns.Add("D", typeof(String));
        dt2.Columns.Add("E", typeof(String));

然後迴圈dt1將dt1中的資料新增到dt2中

for (int I=0;i<dt1.Rows.Count;i++)

{

            DataRow dr = dt2.NewRow();
            dr["A"] = dt1.Rows[i]["A"];

            dr["B"]=dt1.Rows[i]["B"];

            dr["C"]=dt1.Rows[i]["C"];
            dt2.Rows.Add(dr);

}

然後執行SQL語句將dt1中存入從資料庫table2中的資料得到dt中包含(ADE),迴圈dt1將其新資訊新增到dt2中

for (int I=0;i<dt1.Rows.Count;i++)

{

            for (int j=0;j<dt2.Rows.Count;j++)

             {

               if (dt2.Rows[j]["A"]==dt1.Rows[i][A])

                  {

                     dt2.Rows[j]["D"]=dt1.Rows[i]["D"];

                     dt2.Rows[j]["E"]=dt1.Rows[i]["E"];

                     break;

                  }

             }

}

利用如此方法得到處理後的dt2,將dt2繫結到ASPxGridView上面。除此之外,如果要對ASPxGridView做一些特殊處理,比如資料庫中儲存的是某些編碼,在ASPxGridView中想要顯示這些編碼對應的文字也可以用該方法。

例如:

table1 欄位 name type sex  張三 1 1

其中type=1想要顯示為“學生”sex=1想要顯示為“男”

用select * from table1得到的dt中資料是這樣的

dt.Rows[0]["name"]="張三";

dt.Rows[0]["type"]="1";

dt.Rows[0]["sex"]="1";

直接繫結到ASPxGridView上的話顯示的是   張三 1 1,但是想顯示為 張三 學生 男  的話就可以對dt做些處理。

處理如下

for (int i=0;i<dt.Rows.Count;i++)

{

if (dt.Rows[i]["type"]=="1")

{dt.Rows[i]["type"]="學生")

}

if (dt.Rows[i]["sex"]=="1")

{dt.Rows[i]["sex"]="男")

}

}

這樣處理過後的dt再繫結到ASPxGridView上就行了。總之是查詢到資料之後可以對資料進行一些操作,如果一個DataTable不夠用的話,可以申請多個進行處理,將DataTable處理為自己想要的樣式再繫結。

除此之外還可以在繫結之後進行顯示的時候進行更改,在ASPxGridView的操作中有個HtmlRowCreted,在這個事件中新增

protected void ASPxGridView1_HtmlRowCreated(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewTableRowEventArgs e)
   {
      // int i = e.VisibleIndex;
       String type;
       LiteralControl a_cell = new LiteralControl();
       a_cell=(LiteralControl)e.Row.Cells[2].Controls[0];
       type = a_cell.Text.ToString();
       switch (type)
       {
           case "1":
               a_cell.Text = "型別1";
               break;
           case "2":
               a_cell.Text = "型別2";
               break;
           case "3":
               a_cell.Text = "型別3";
               break;
           case "4":
               a_cell.Text = "型別4";
               break;
           case "5":
               a_cell.Text = "型別5";
               break;
           case "6":
               a_cell.Text = "型別6";
               break;
       }
   }

這樣本來繫結的資料來源中type這一項儲存為1,2,3,4,5,6在這裡進行了處理就會變成型別1,型別2,型別3,型別4,型別5,型別6


相關文章