查看和编辑模式下的 RadioButtonList 选择
RadioButtonList selection in view and edit mode
我有一个单选按钮列表,它应该在 Web 表单的查看和编辑模式下显示。当页面加载时,单选按钮应该根据从数据库中获取的值(IsAnimal of type bit)选择值。
当用户切换到编辑模式时,单选按钮的默认选择值也应该与查看模式相同。编辑模式下单选按钮的选中值会随着用户切换而改变。但我这里的意思是,在 selectedindex_changed 之后,pre_render 将继续触发。如果我在预渲染中执行 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>
我找到了一个样本 here,看起来像您需要的。示例数据有四列,在第 3 列和第 4 列中有一个单选按钮列表和一个下拉列表,因此下面的代码使用数据行单元格 [2] 和 [3]。我添加了一些评论。
// 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;
}
我有一个单选按钮列表,它应该在 Web 表单的查看和编辑模式下显示。当页面加载时,单选按钮应该根据从数据库中获取的值(IsAnimal of type bit)选择值。
当用户切换到编辑模式时,单选按钮的默认选择值也应该与查看模式相同。编辑模式下单选按钮的选中值会随着用户切换而改变。但我这里的意思是,在 selectedindex_changed 之后,pre_render 将继续触发。如果我在预渲染中执行 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>
我找到了一个样本 here,看起来像您需要的。示例数据有四列,在第 3 列和第 4 列中有一个单选按钮列表和一个下拉列表,因此下面的代码使用数据行单元格 [2] 和 [3]。我添加了一些评论。
// 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;
}