C# 从父页面填充web用户控件的控件

C# 从父页面填充web用户控件的控件,c#,asp.net,C#,Asp.net,我有两个web用户控件,一个是显示结果的网格视图,另一个包含简单的文本框和下拉列表,它们基本上是为了编辑网格视图项而创建的 aspx.cs页面代码为 GridView gView = PlaceHolder2.Controls[0].FindControl("grvBranches") as GridView; int index = gView.SelectedIndex; GridViewRow grd = gView.Rows[index]; Label lbl = (Label)grd

我有两个web用户控件,一个是显示结果的网格视图,另一个包含简单的文本框和下拉列表,它们基本上是为了编辑网格视图项而创建的

aspx.cs页面代码为

GridView gView = PlaceHolder2.Controls[0].FindControl("grvBranches") as GridView;
int index = gView.SelectedIndex;

GridViewRow grd = gView.Rows[index];
Label lbl = (Label)grd.FindControl("lblID");

int rowid = 0;
int.TryParse(lbl.ToString(), out rowid);
在rowid中,i包含所选项目的id

现在我想填写webusercontrol中的以下所有项目

<div class="col2_form1">
 <div class="form1_bar1">
    <div class="form1_txt1_div">
        <asp:Label ID="lblBranchName" runat="server" Text="Branch Name">
        </asp:Label>
    </div>
    <div class="form1_txtfield_div">
        <asp:TextBox runat="server" ID="txtBranchName" class="form1_TxtField" />
    </div>
    <div class="form1_txt2_div">
        <asp:RequiredFieldValidator ID="RFVBranchName" ErrorMessage="*" Display="Dynamic"
            ValidationGroup="Save" ControlToValidate="txtBranchName" runat="server" />
        <%--  <asp:Label Text="Error" ID="lblBranchNameError" runat="server" />--%>
    </div>
</div>
<div class="form1_bar2">
    <div class="form1_txt1_div">
        <asp:Label Text=" Organization Name" ID="lblOrganizationName" runat="server" />
    </div>
    <div class="form1_txtfield_div">
        <asp:DropDownList ID="ddlOrganization" CssClass="form1_TxtField" runat="server">
        </asp:DropDownList>
    </div>
    <div class="form1_txt2_div">
        <%--<asp:Label Text="Error" ID="lblOrganizationNameError" runat="server" />--%>
    </div>
</div>
<div class=" form1_bar1">
    <div class="form1_txt1_div ">
        <asp:Label Text="Address Line1" ID="lblAddresLine1" runat="server" />
    </div>
    <div class=" form1_txtfield_div">
        <asp:TextBox runat="server" ID="txtAddresLine1" CssClass="form1_TxtField" />
    </div>
    <div class="form1_txt2_div ">
        <asp:RequiredFieldValidator ErrorMessage="*" Display="Dynamic" ValidationGroup="Save"
            ControlToValidate="txtAddresLine1" runat="server" />
    </div>
</div>
<div class=" form1_bar2">
    <div class="form1_txt1_div ">
        <asp:Label Text="Address Line2" ID="lblAddresLine2" runat="server" />
    </div>
    <div class="form1_txtfield_div ">
        <asp:TextBox runat="server" ID="txtAddresLine2" CssClass="form1_TxtField" />
    </div>
    <div class="form1_txt2_div ">
    </div>
</div>
<div class="form1_bar1 ">
    <div class="form1_txt1_div">
        <asp:Label Text="Country" ID="lblCountry" runat="server" />
    </div>
    <div class="form1_txtfield_div " style="float: left;">
        <asp:DropDownList ID="ddlCountry" AutoPostBack="true" CssClass="form1_TxtField" runat="server"
            OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged">
        </asp:DropDownList>
    </div>
    <div class=" form1_txt2_div">
    </div>
</div>
<div class=" form1_bar2">
    <div class="form1_txt1_div ">
        <asp:Label Text="State" ID="lblState" runat="server" />
    </div>
    <div class="form1_txtfield_div ">
        <asp:DropDownList ID="ddlState" AutoPostBack="true" CssClass="form1_TxtField" runat="server"
            OnSelectedIndexChanged="ddlState_SelectedIndexChanged">
        </asp:DropDownList>
    </div>
    <div class="form1_txt2_div ">
    </div>
</div>
<div class="form1_bar1 ">
    <div class="form1_txt1_div ">
        <asp:Label Text="City" ID="lblCity" runat="server" />
    </div>
    <div class="form1_txtfield_div ">
        <asp:DropDownList runat="server" CssClass="form1_TxtField" ID="ddlCity">
        </asp:DropDownList>
    </div>
    <div class="form1_txt2_div ">
    </div>
</div>
<div class="form1_bar2 ">
    <div class="form1_txt1_div ">
        &nbsp;
    </div>
    <div class="form1_txtfield_div">
        <asp:Button Text="Save" Width="100px" runat="server" ID="btnSave" ValidationGroup="Save"
            OnClick="btnSave_Click" />
    </div>
    <div class="form1_txt2_div">
        <asp:Label Text="" ID="lblMsg" Visible="false" runat="server" />
    </div>
</div>
在父页面上,即在aspx页面上,我称之为

if (ViewState["controlname"] != null)
{
  PlaceHolder pl = MainPanel.FindControl(ViewState["controlname"].ToString()) as PlaceHolder;
  pl.Controls.RemoveAt(0);
}
Control uc = (Control) Page.LoadControl("~/usercontrols/control_forms/branch_aspx_form.ascx");

ViewState["path"] = "~/usercontrols/control_forms/branch_aspx_form.ascx";
ViewState["controlname"] = "PlaceHolder1";
PlaceHolder1.Controls.Add(uc);


branch_view[] branch_to_edit = EntityService.ServiceInstance.GetBranchByBranchID(row_id);

foreach (branch_view item in branch_to_edit)
{
       usercontrols.control_forms.branch_aspx_form branch_control = 
                 new usercontrols.control_forms.branch_aspx_form();
      branch_control.ABC_DEF = " hello";  // Call property here
}
谢谢
用户控件.ascx文件中的Gurbax为需要拉入用户控件的每个字段创建属性

然后,通过指定UserControlId.Property语法,您可以从.aspx页面简单地访问它们,如下所示:

public string Name
{
    get { return txtName.Text; }
    set { txtName.Text = value; }
}

public string Surname
{
    get { return txtSurname.Text; }
    set { txtSurname.Text = value; }
}
在.aspx页面上,可以按如下方式访问属性:

protected void PopulateUserControl_Click(object sender, EventArgs e)
{
    userControlName.Name = "Bob";
    userControlName.Surname = "The Builder";
}

在用户控件.ascx文件中,为需要拉入用户控件的每个字段创建属性

然后,通过指定UserControlId.Property语法,您可以从.aspx页面简单地访问它们,如下所示:

public string Name
{
    get { return txtName.Text; }
    set { txtName.Text = value; }
}

public string Surname
{
    get { return txtSurname.Text; }
    set { txtSurname.Text = value; }
}
在.aspx页面上,可以按如下方式访问属性:

protected void PopulateUserControl_Click(object sender, EventArgs e)
{
    userControlName.Name = "Bob";
    userControlName.Surname = "The Builder";
}

创建用户控件以更新项目有什么特殊原因吗?通过详细信息视图可以轻松实现这一点control@DenysWessels是的我必须通过用户控制Hi Gurbax来完成,我很想帮助您。请您具体说明您在哪个部分遇到问题?我知道您可以从gridview中获取所选行的id。您需要帮助从数据库中检索所选id的数据,还是需要帮助用检索到的数据填充用户控件?@Denyswessel这是我的问题我拥有数据库中所选行的所有数据,但我知道问题是如何将这些数据添加到其他用户控件的字段中,即如何访问父aspx页面上web用户控件的控件,以便我可以将值分配给它们。是否有特殊原因创建用户控件以更新项目?您可以通过详细信息视图轻松实现这一点control@DenysWessels是的我必须通过用户控制Hi Gurbax来完成,我很想帮助您。请您具体说明您在哪个部分遇到问题?我知道您可以从gridview中获取所选行的id。您需要帮助从数据库中检索所选id的数据,还是需要帮助用检索到的数据填充用户控件?@Denyswessel这是我的问题我拥有该选定行数据库中的所有数据,但我知道问题是如何将这些数据添加到其他用户控件的字段,即如何访问父aspx页面上web用户控件的控件,以便将值分配给它们。当我应用此代码时,当我设置属性集{txtName.Text=value;}}在我使用此属性的地方,我传递的值是正确的,即不是nullHi Gurbax,请你回答你的问题并提供一些代码。在不知道你是如何在代码中实现建议的解决方案的情况下分析这样的问题是非常困难的。或者你可以创建一个关于空引用异常@Denys Wessels的新问题。请阅读我编辑的问题的最后几行问题当我应用此代码时,当我设置属性集{txtName.Text=value;}}的值时,会发生空引用异常。从该属性集我使用此属性时,我传递的值是正确的,即不是nullHi Gurbax,请你回答你的问题并提供一些代码。在不知道你如何在代码中实现建议的解决方案的情况下,很难分析这样的问题。或者,你可以创建一个关于空引用异常@Denys Wessels的新问题。请阅读我编辑问题的最后一行问题