全編輯WebGrid控制項LrcGrid(6)——控制項呈現

來源:互聯網
上載者:User
web|控制項 全編輯WebGrid控制項LrcGrid(6)——控制項呈現

建立子控制項

重寫CreateChildControls()過程,調用建立子控制項的方法ReBuild()
每當 ASP.NET 頁架構需要建立控制項樹時就會調用CreateChildControls()方法,且該方法調用並不限於控制項生命週期的特定階段。例如,可以在載入頁時、在綁定資料過程中或者在呈現過程中調用CreateChildControls

protected override void CreateChildControls()
{
this.ReBuild();
}

重寫OnPreRender(EventArgs e)過程,註冊用戶端指令碼塊,此指令碼可使使用者斷行符號時進行焦點跳轉,注釋掉的部分為使用資源檔的方法.
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender (e);
if(this._isTabChg)
{
if(!Page.IsClientScriptBlockRegistered("lrc_chgTab"))
{
string str_chgTab = @"<script language='javascript' event='onkeydown' for='document'>
<!--
if(event.keyCode==13 && event.srcElement.type!='button' && event.srcElement.type!='submit' && event.srcElement.type!='reset' && event.srcElement.type!='')
event.keyCode=9;
-->
</script>";
Page.RegisterClientScriptBlock("lrc_chgTab",str_chgTab);
}
}
/*
*
ResourceManager manager = new ResourceManager(this.GetType());
ResourceSet resources = manager.GetResourceSet(System.Globalization.CultureInfo.CurrentCulture,true,true);
if(!Page.IsClientScriptBlockRegistered("LiuRuiCai.LrcGrid.Script"))
{
string script = resources.GetString("ClientScript");
this.Page.RegisterClientScriptBlock("LiuRuiCai.LrcGrid.Script",script);
string style = resources.GetString("ClientStyle");
this.Page.RegisterClientScriptBlock("LiuRuiCai.LrcGrid.Style",style);
}
*/
}

ReBuild()方法,當在運行時改變了控制項屬性,可調用此方法重新構造控制項,它調用一系列的內部過程:管理檢視狀態,清空子控制項,重新初始化資料集,建立標題列、建立資料行、建立操作行等:

/// <summary>
/// 重新構造控制項
/// </summary>
public void ReBuild()
{
if(this.CurrentPageIndex == -1)
this.CurrentPageIndex = 0;
this.Controls.Clear();
this.ClearChildViewState();
this.Attributes.Add("isdel",this._isDel.ToString());
this.Attributes.Add("isadd",this._isAdd.ToString());
this.DbSet = null;
base.CreateChildControls ();
//建立標題列
buildTitle();
initDataSet();
if(this.DbSet != null)
{
if(this.DbSet.Tables.Count > 0)
{
if(this.DbSet.Tables[0].Rows.Count > 0)
{
//建立資料行
buildCol();
}
}
}
//建立操作行
buildOper();
}

建立標題列buildTitle()方法,標題列也就的表頭,根據設定標題內容屬性colsA,這裡我把每列的表頭文字設成可觸發伺服器端排序事件的LinkButton,並在每一個可編輯的列頭添加一個HtmlAnchor ▼ ,這個HtmlAnchor 調用用戶端指令碼chgEdit()函數,(指令碼內容請參見《全編輯WebGrid控制項LrcGrid(4)—— 指令碼庫和樣式表》)將表格中的一列在正常和編輯模式間切換,如果屬性設定允許刪除,將在標題列添加"全部刪除"的LinkButton

表頭效果如下圖所示:

private void buildTitle()
{
TableRow tr =new TableRow();
tr.BackColor = _titColor;
TableCell tc = new TableCell();
LinkButton lk = new LinkButton();
HtmlAnchor lkE = new HtmlAnchor();
if(colsA != null)
{
for(int i=0;i<colsA.Length;i++)
{
tc = new TableCell();
//tc.BackColor = _titColor;
//排序
if(_isSort)
{
//全編輯
lk = new LinkButton();
lk.ID = "LrcLk_" + i;
lk.Text = colsA[i];
lk.Command += new CommandEventHandler(lk_Command);
lk.CommandArgument = colsA[i];
tc.Controls.Add(lk);

}
else
{
tc.Controls.Add(new LiteralControl(colsA[i]));
}
if(isEditCol(i))
{
lkE = new HtmlAnchor();
lkE.ID = "lrcLkE_" + i;
lkE.InnerText = "▼";
lkE.HRef = "javascript:chgEdit(" + i + "," + this.ClientID + ");";
tc.Controls.Add(lkE);
}
tr.Cells.Add(tc);
}
if(_isDel)
{
tc = new TableCell();
lk = new LinkButton();
lk.ID = "LrcDelAll";
lk.Text = "全部刪除";
lk.Command += new CommandEventHandler(lkDel_Command);
tc.Controls.Add(lk);
tr.Cells.Add(tc);
}
this.Rows.Add(tr);
}
}

建立資料行buildCol()方法,該方法遍曆資料集中表的所有項,將資料來源中的記錄和欄位顯示成表單的行和列,根據設定的屬性,在表格項中添加不同的控制項,並將資料來源中的值綁定到這些控制項

不可編輯列:直接將資料項目值寫入TableCell.Text
非外



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。