Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SharePoint Web部件+;覆盖渲染方法_C#_Sharepoint - Fatal编程技术网

C# SharePoint Web部件+;覆盖渲染方法

C# SharePoint Web部件+;覆盖渲染方法,c#,sharepoint,C#,Sharepoint,您好!在SharePoint中创建自定义web部件时,是否可以覆盖“Render”方法?我有一个从System.web.UI.WebControl.WebPart继承的web部件。我将控件添加到“CreateChildControls”中的控件集合中,然后重写“Render”方法来呈现html和控件 当我使用下拉列表时,我遇到了一些问题,但我想知道我的上述方法是否正确,然后再尝试绑定下拉列表来解决问题 已编辑 我初始化下拉列表并将其添加到“CreateChildControls”中的控件集合中。

您好!在SharePoint中创建自定义web部件时,是否可以覆盖“Render”方法?我有一个从System.web.UI.WebControl.WebPart继承的web部件。我将控件添加到“CreateChildControls”中的控件集合中,然后重写“Render”方法来呈现html和控件

当我使用下拉列表时,我遇到了一些问题,但我想知道我的上述方法是否正确,然后再尝试绑定下拉列表来解决问题

已编辑

我初始化下拉列表并将其添加到“CreateChildControls”中的控件集合中。在这个方法的末尾,我调用“BindData”,它绑定我的下拉列表,如果我正在编辑一条现有记录,它将绑定下拉列表数据并设置正确的所选索引。然后,我在“render”方法中渲染控件。下面是一段代码片段

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”是一个更新面板。是的,我有一个更新面板用于一个下拉列表,我使用更新方法更新其他更新面板

这是“渲染”方法

我的“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;
我得到一个错误,一个控件不能有两个选定的索引。但是在任何给定的时间只有一个。下拉列表的状态会发生变化,但是当它呈现出来时,就会爆炸

我不明白为什么

谢谢。

渲染方法可以

这里有一个更好的解决方案。第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);
然后我可以绑定网格并设置一个选定的索引

我的Bind方法如下所示

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);
            }
        }

如果我从“System.Web.UI.WebControls.WebPart”继承,那么我必须重写“Render”“方法。因此,我想我所做的是正确的。如果不执行.Selected=true,会发生什么。然后选择哪个项目?您正在清除正确的选择。我的下一个猜测可能是,您是否在几个下拉列表中使用了PleaseSelection项,意思是相同的实例?阅读上的评论-是的,我没有意识到我在不同的地方使用它。你不应该覆盖Render(),而应该覆盖RenderContents()。是的,我知道这一点,但我没有做任何与WPSC,所以我只是忽略了它。我现在确实更改了代码。谢谢提醒:-)
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);
            }
        }