DataTable中數據:
ID NAME State
1 A 1
2 B 0
3 C 0
State數據列為int型,想讓它在頁面讀取顯示時,1顯示為非工作日轉工作日,0顯示為工作日轉非工作日。
詳細原因:當在做列轉換時
1,數據庫中類型和要修改成的類型不一致;
2,遇到DataTable中有數據則無法進行數據轉換的問題。
解決方法:如果直接修改當前datatable里制定列的數據會提示因為有數據所以不讓修改,而通過if判斷直接賦值又會提示數據類型不同而拒絕操作,報錯。
通過在網上參照其他該類問題,基本解決方式都是要修改列結構。既然明白了關鍵所在那就直奔主題了。
1,我新建立一個新的datatable類型的變量,定義好各個列為自己需要的類型,然后添加各個列到新datatable中。
2,遍歷原datatable數據,給新datatable各行各列賦值。
3,添加篩選條件,按照需要將指定列的內容進行更改,得到想要的效果。
具體代碼如下:
1 private void Bind()//數據綁定方法 2 { 3 int TotalPage = 0; 4 PageBarManager p = new PageBarManager(); 5 6 dt = p.GetPageBarDate("WorkDaySet", "id", WebUserControl1.strFieldName, WebUserControl1.strFieldValue, 10, p.CurrentPage, ref TotalPage);//調用了分頁存儲過程 7 DataTable dtnew = new DataTable(); //新建一個對象 8 if (dt != null && dt.Rows.Count > 0) 9 { 10 DataColumn ID = new DataColumn("ID", typeof(int)); //設置各列類型 11 DataColumn Day = new DataColumn("day", typeof(DateTime)); 12 DataColumn state = new DataColumn("state", typeof(string)); 13 dtnew.Columns.Add(ID); //向datatable中添加列 14 dtnew.Columns.Add(Day); 15 dtnew.Columns.Add(state); 16 for (int i = 0; i < dt.Rows.Count; i++) //遍歷原數據向新datatable中賦值 17 { 18 dtnew.Rows.Add(dt.Rows[i].ItemArray); 19 } 20 foreach (DataRow dr in dtnew.Rows) //對特定的行添加限制條件 21 { 22 if (dr[2].ToString() =="0") 23 { 24 dr[2] = "工作日轉非工作日"; 25 } 26 else 27 { 28 dr[2] = "非工作日轉工作日"; 29 } 30 } 31 } 32 rptCurrency.DataSource = dtnew; //數據綁定 顯示 33 rptCurrency.DataBind(); 34 if (dt.Rows.Count == 0) 35 WebUserControl1.Visible = false; 36 WebUserControl1.lblPage = TotalPage.ToString(); 37 38 }
這樣就實現了預定的功能。
