簡體   English   中英

SharePoint WebPart +替代呈現方法

[英]SharePoint WebPart + Override render method

嗨在SharePoint中創建自定義Web部件時,可以重寫“ Render”方法嗎? 我有一個Web部件,它繼承自System.Web.UI.WebControls.WebPart。 我將控件添加到“ CreateChildControls”中的控件集合中,然后重寫“ Render”方法以呈現html和控件。

使用下拉列表時出現一些問題,但是在嘗試通過綁定下拉列表解決該問題之前,我想知道以上方法是否正確。

已編輯

我初始化下拉列表,並將其添加到“ CreateChildControls”中的控件集合中。 在此方法的最后,我調用“ BindData”,它綁定了下拉列表,如果我正在編輯現有記錄,它將綁定下拉列表數據並設置正確的選定索引。 然后,我在“渲染”方法中渲染控件。 這是一個代碼片段

protected override void CreateChildControls()
        {
            base.CreateChildControls();
            this.EnsureUpdatePanelFixups();

 ddlClient = new DropDownList();
            ddlClient.ID = "ddlClient";
            ddlClient.SelectedIndexChanged += new EventHandler(ddlClient_SelectedIndexChanged);
            ddlClient.AutoPostBack = true;
            ddlClient.ValidationGroup = __VALIDATIONGROUP;
            ddlClient.Width = ObjCtrlWidth;

            upClient = new UpdatePanel();
            upClient.ID = "upClient";
            upClient.UpdateMode = UpdatePanelUpdateMode.Conditional;
            upClient.ContentTemplateContainer.Controls.Add(ddlClient);

            this.Controls.Add(upClient);

//More controls here

BindData();
}

“ ddlClient是一個“ DropDownList”,“ upClient”是一個更新面板。是的,我為一個下拉列表提供了一個更新面板,並使用該更新方法更新了其他更新面板。

這是“渲染”方法

protected override void Render(System.Web.UI.HtmlTextWriter writer)
        {
//stuff here

    writer.RenderBeginTag(System.Web.UI.HtmlTextWriterTag.Td);
            upClient.RenderControl(writer);
            writer.RenderEndTag();

//stuff here
}

我的“ BindData”方法調用其他綁定方法,這些方法綁定不同的下拉列表,這就是其中一種綁定方式

    private void BindData()
            {
                BindClientTypes();
                //binding other drop down lists here

//If an existing record isbeing edited, this method will get the data from db and bind all the controls               
BindMEA();
            }

private void BindClientTypes()
        {
            DataTable dt = DB.GetAllClientTypes();

            if (dt == null)
            {
                ltGlobalErrorMsg.Text = GlobalErrorMessage;
                ltGlobalErrorMsg.Visible = true;
            }
            else
            {
                ddlClient.ClearSelection();
                ddlClient.DataSource = dt;
                ddlClient.DataValueField = "ID";
                ddlClient.DataTextField = "Name";
                ddlClient.DataBind();
                ddlClient.Items.Insert(0, PleaseSelectItem);
                ddlClient.ClearSelection();
            }
        }

在我的BindMEA中,執行以下操作

ddlClient.ClearSelection();
ddlClient.Items.FindByValue(objMea.ClientTypeID.ToString()).Selected = true;

我收到一條錯誤消息,說一個控件不能有兩個選定的索引。 但是在任何給定時間只有一個。 下拉菜單的狀態會發生變化,但是在渲染時會炸掉。

我不明白為什么

謝謝。

RenderMethod可以。

這是一個更好的解決方案。 第2行和第3行是重要的部分:

ddlClient.Clear();
ddlClient.AppendDataBoundItems = true;
ddlClient.Add( new ListItem("Please Select" ); // Important to have a new instance
ddlClient.DataSource = dt;
ddlClient.DataValueField = "ID";
ddlClient.DataTextField = "Name";
ddlClient.DataBind();
ddlClient.ClearSelection();

所以我弄清楚了為什么在6個多小時后會發生錯誤...

如果我在綁定下拉列表的方法中評論此行

//ddlClient.Items.Insert(0, PleaseSelectItem);

然后,我可以綁定網格並設置選定的索引。

所以我的綁定方法看起來像這樣

private void BindClientTypes()
        {
            DataTable dt = DB.GetAllClientTypes();

            if (dt == null)
            {
                ltGlobalErrorMsg.Text = GlobalErrorMessage;
                ltGlobalErrorMsg.Visible = true;
            }
            else
            {
                ddlClient.DataSource = dt;
                ddlClient.DataValueField = "ID";
                ddlClient.DataTextField = "Name";
                ddlClient.DataBind();
                //ddlClient.Items.Insert(0, PleaseSelectItem);
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM