【问题标题】:RadioButtonList selection in view and edit mode视图和编辑模式下的 RadioButtonList 选择
【发布时间】:2015-11-16 16:05:12
【问题描述】:

我有一个单选按钮列表,应该以 Web 表单的查看和编辑模式显示。页面加载时,单选按钮应根据从数据库中获取的值(IsAnimal 类型为 bit)选择值。

当用户切换到编辑模式时,单选按钮默认选择值也应该与查看模式相同。编辑模式下单选按钮的选中值会随着用户切换而改变。但是我在这里遇到的是,在 selectedindex_changed 之后,pre_render 将继续触发。如果我在 prerender 中执行 if(!Page.IsPostBack) 则默认选择值在编辑模式下为 null。

protected void Form_PreRender(object sender, EventArgs e) {
  RadioButtonList rbViewIsAnimal = (RadioButtonList) fvForm.FindControl("rbViewIsAnimal");
  RadioButtonList rbEditIsAnimal = (RadioButtonList) fvForm.FindControl("rbEditIsAnimal");

  if (txtIsAnimal.Value == "True") {
    if (rbViewIsAnimal != null) {
      rbViewIsAnimal.Items.FindByValue("1").Selected = true;
    }
    if (rbEditIsAnimal != null) {
      rbEditIsAnimal.Items.FindByValue("1").Selected = true;
    }
  } else {
    if (rbViewIsAnimal != null) {
      rbViewIsAnimal.Items.FindByValue("0").Selected = true;
    }
    if (rbEditIsAnimal != null) {
      rbEditIsAnimal.Items.FindByValue("0").Selected = true;
    }
  }
}


protected void rbEditIsAnimal_SelectedIndexChanged(object sender, EventArgs e) {
  RadioButtonList rbEditIsAnimal = (RadioButtonList) fvForm.FindControl("rbEditIsAnimal");
  TextBox txtEditAnimalDescription = (TextBox) fvForm.FindControl("txtEditAnimalDescription");

  if (txtIsAnimal.Value == "True") {
    txtEditAnimalDescription.Enabled = false;
    txtEditAnimalDescription.Text = string.Empty;
  } else {
    txtEditAnimalDescription.Enabled = true;
  }
}
<ItemTemplate>
  <asp:HiddenField runat="server" ID="txtIsAnimal" Value='<%# Bind("IsAnimal") %>' />
  <asp:RadioButtonList runat="server" ID="rbViewIsAnimal" Enabled="false">
    <asp:ListItem Text="Not Animal" Value="0" />
    <asp:ListItem Text="Animal" Value="1" />
  </asp:RadioButtonList>
</ItemTemplate>

<EditItemTemplate>
  <asp:HiddenField runat="server" ID="txtIsAnimal" />
  <asp:RadioButtonList runat="server" ID="rbEditIsAnimal" Value='<%# Bind("IsAnimal") %>' AutoPostBack="true">
    <asp:ListItem Text="Not Animal" Value="1" />
    <asp:ListItem Text="Animale" Value="0" />
  </asp:RadioButtonList>
</EditItemTemplate>

【问题讨论】:

  • 能否将该代码移至 Page_Load 中。
  • @MethodMan 你指的是哪个代码?如果您的意思是 pre_render 中的代码,结果是 edititemtemplate 中的单选按钮列表将没有任何默认选定值,并且如果在编辑模式下单击取消按钮,itemtemplate 中的选定值也会丢失

标签: c# asp.net webforms


【解决方案1】:

我找到了一个样本here,看起来像你需要的。示例数据有四列,在第 3 列和第 4 列中有一个单选按钮列表和一个下拉列表,因此下面的代码使用数据行单元格 [2] 和 [3]。我加了几个cmets。

// i believe this fires on load *and* when editing.
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
  DataRowView dRowView = (DataRowView)e.Row.DataItem;
  if (e.Row.RowType == DataControlRowType.DataRow)
  {
    // editing:
    if ((e.Row.RowState & DataControlRowState.Edit) > 0)
    {
      // find the controls.
      RadioButtonList rblGender = (RadioButtonList)e.Row.FindControl("rbGenderEdit");
      DropDownList ddlStatus = (DropDownList)e.Row.FindControl("ddlStatusEdit");
      // set the values.
      rblGender.SelectedValue = dRowView[2].ToString();
      ddlStatus.SelectedValue = dRowView[3].ToString();
    }
  }           
}

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
  // find the controls.
  RadioButtonList rblGender = (RadioButtonList)GridView1.Rows[e.RowIndex].FindControl("rbGenderEdit");
  DropDownList ddlStatus = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlStatusEdit");
  // set the values.
  SqlDataSource1.UpdateParameters["Sex"].DefaultValue = rblGender.SelectedValue;
  SqlDataSource1.UpdateParameters["MaritalStauts"].DefaultValue = ddlStatus.SelectedValue;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多