GridView中CheckBox,RadioButton并存的同时且有相互关系
目的: 在GridView中一列存放CheckBox,一列存放RadioButton;并且选择了CheckBox才能激活同行的RadioButton.
前台文件
<asp:GridView ID="GridView1" runat="server" Width="99%" AutoGenerateColumns="False"
SkinID="GridViewskin" onrowdatabound="GridView1_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="编号" ItemStyle-Width="25%">
<ItemTemplate>
<%#Eval("ID")%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="名称" ItemStyle-Width="25%">
<ItemTemplate>
<%#(Eval("Name"))%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="设置" ItemStyle-Width="25%">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true"
oncheckedchanged="CheckBox1_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="默认" ItemStyle-Width="25%">
<ItemTemplate>
<asp:RadioButton ID="RadioButton1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<script type="text/javascript">
var last=null;
function single(obj)
{
if(last==null) //第一次选择RadioButton时赋id值给last
{
last=obj.id;
}
else //第一次以后的每一次都在这运行,把上此的RadioButton.Checked=false,记下此次的obj.name
{
var lo=document.getElementById(last);
lo.checked=false;
last=obj.id;
}
obj.checked="checked"; //添加checked属性,以便在上边赋值为false
}
</script>
后台CS
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
RadioButton rb = (RadioButton)e.Row.FindControl("RadioButton1");
if (rb != null)
{
rb.Attributes.Add("onclick", "single(this)"); //single(obj)为js函数
rb.Enabled = false;
}
}
}
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
RadioButton rbtn = (RadioButton)GridView1.Rows[i].FindControl("RadioButton1");
if (cbox.Checked == true)
{
cbox.Checked = true;
rbtn.Checked = false;
rbtn.Enabled = true;
}
else
{
rbtn.Checked = false;
rbtn.Enabled = false;
}
}
}