重構(gòu)《Repeater控件動態(tài)變更列(Header,Item和Foot)信息》
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
早上有分享《Repeater控件動態(tài)變更列(Header,Item和Foot)信息》 ,是動態(tài)變更一些列的內(nèi)容。 雖然它算不上是完全動態(tài)化,但它已經(jīng)達(dá)到初期想要的效果。如果你稍有仔細(xì),也能輕易把它弄出來。現(xiàn)另開一篇,Insus.NET不是重新另外寫,而是想重構(gòu)cs的代碼,因為前一篇的代碼雖然簡單,但代碼冗余過多。 //宣告5個變量,將用來存儲那5個月份每個部分的數(shù)量 decimal c1, c2, c3, c4, c5;
const int dynamicColumns = 5;
objPrintLog.Months = 5; //最近連續(xù)5個月份 改為: objPrintLog.Months = dynamicColumns;
接下來,我們重構(gòu)Repwater控件的Header的代碼,為了好對比,Insus.NET把上一篇對應(yīng)的圖片引用在這里: 重構(gòu)如下: protected void RepeaterLFMS_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Header) { if (e.Item.FindControl("LabelH0") != null && e.Item.FindControl("LabelH1") != null && e.Item.FindControl("LabelH2") != null && e.Item.FindControl("LabelH3") != null && e.Item.FindControl("LabelH4") != null && e.Item.FindControl("LabelH5") != null) { for (int i = 0; i <= dynamicColumns; i++) { Label lh = (Label)e.Item.FindControl("LabelH" + i.ToString()); lh.Text = objDt.Columns[i].ColumnName; } } }
舊代碼重構(gòu)之后的代碼,第16行代碼,是判斷第一列,因為它是字符串,因此單獨排除。第23行,使用ViewState來替代舊程序的5個變量。 1 if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) 2 { 3 DataRowView drv = (DataRowView)e.Item.DataItem; 4 if (e.Item.FindControl("LabelI0") != null 5 && e.Item.FindControl("LabelI1") != null 6 && e.Item.FindControl("LabelI2") != null 7 && e.Item.FindControl("LabelI3") != null 8 && e.Item.FindControl("LabelI4") != null 9 && e.Item.FindControl("LabelI5") != null) 10 { 11 12 for (int j = 0; j <= dynamicColumns; j++) 13 { 14 Label li = (Label)e.Item.FindControl("LabelI" + j.ToString()); 15 16 if (j == 0) 17 li.Text = drv[objDt.Columns[0].ColumnName].ToString(); 18 else 19 { 20 decimal v = string.IsNullOrEmpty(drv[objDt.Columns[j].ColumnName].ToString()) ? 0 : Convert.ToDecimal(drv[objDt.Columns[j].ColumnName].ToString()); 21 li.Text = v.ToString(); 22 23 ViewState["c" + j.ToString()] = ViewState["c" + j.ToString()] == null ? 0 : Convert.ToDecimal(ViewState["c" + j.ToString()]) + v; 24 } 25 } 26 } 27 } Foot重構(gòu)好的代碼,第14行是判斷是否為第一列,第17行,是把ViewState的值賦給Label。 1 if (e.Item.ItemType == ListItemType.Footer) 2 { 3 if (e.Item.FindControl("LabelF0") != null 4 && e.Item.FindControl("LabelF1") != null 5 && e.Item.FindControl("LabelF2") != null 6 && e.Item.FindControl("LabelF3") != null 7 && e.Item.FindControl("LabelF4") != null 8 && e.Item.FindControl("LabelF5") != null) 9 { 10 for (int k = 0; k <= dynamicColumns; k++) 11 { 12 Label lf = (Label)e.Item.FindControl("LabelF" + k.ToString()); 13 14 if (k == 0) 15 lf.Text = "Total"; 16 else 17 lf.Text = ViewState["c" + k.ToString()] == null ? "0" : ViewState["c" + k.ToString()].ToString(); 18 } 19 } 20 } 21 }
該文章在 2017/11/16 23:53:29 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |