C# 使用单选按钮ASP.NET选择一个Gridview行
我用单选按钮列将Gridview绑定到数据库表,我想用单选按钮选择一行。是否需要一个单选按钮组?我有上面带有复选框的代码,但我想把它改为单选按钮。我认为单选按钮代码是相似的。非常感谢。我正在使用ASP.NETCC# 使用单选按钮ASP.NET选择一个Gridview行,c#,datagridview,radio-button,C#,Datagridview,Radio Button,我用单选按钮列将Gridview绑定到数据库表,我想用单选按钮选择一行。是否需要一个单选按钮组?我有上面带有复选框的代码,但我想把它改为单选按钮。我认为单选按钮代码是相似的。非常感谢。我正在使用ASP.NETC <asp:GridView ID="DateGrid" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None" > <AlternatingRowStyle BackCol
<asp:GridView ID="DateGrid" runat="server" CellPadding="4" ForeColor="#333333"
GridLines="None" >
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:RadioButton ID="RowSelector" runat="server" GroupName="SelectGroup" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
这可能对你有帮助
前面的代码
<asp:GridView ID="gv" runat="server" AutoGenerateColumns="false" Width="100%">
<Columns>
<asp:TemplateField HeaderText="Select">
<ItemTemplate><asp:RadioButton ID="RowSelector" runat="server" onclick="checkRadioBtn(this);" /></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Start Date">
<ItemTemplate><asp:Label ID="lblStartDate" runat="server" Text='<%# DateTime.Now.ToString("MM/dd/yyyy") %>'></asp:Label></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="End Date">
<ItemTemplate><asp:Label ID="lblEndDate" runat="server" Text='<%# DateTime.Now.ToString("MM/dd/yyyy") %>'></asp:Label></ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
当您选中其他单选按钮时,Javascript将取消选中其他单选按钮
<script type="text/javascript">
function checkRadioBtn(id) {
var gv = document.getElementById('<%=gv.ClientID %>');
for (var i = 1; i < gv.rows.length; i++) {
var radioBtn = gv.rows[i].cells[0].getElementsByTagName("input");
// Check if the id not same
if (radioBtn[0].id != id.id) {
radioBtn[0].checked = false;
}
}
}
</script>
用于绑定的代码隐藏
protected void Page_Load(object sender, EventArgs e)
{
// Check
if (!IsPostBack)
{
// Varaible
DataTable dt = new DataTable();
dt.Columns.Add("A");
dt.Columns.Add("B");
for (int i = 0; i < 3; i++) dt.Rows.Add(i.ToString(), i.ToString());
// Bind
gv.DataSource = dt;
gv.DataBind();
}
}
这可以通过在单选按钮上启用AutoPostBack从后端完成:
<asp:RadioButton ID="RowSelector" runat="server" GroupName="SelectGroup" Checked="false" AutoPostBack="true" OnCheckedChanged="rd_CheckedChanged" />
并在OnCheckedChanged事件中使用以下代码:
static int rdChecked = -1; //Use this variable to store the last checked row
protected void rd_CheckedChanged(object sender, EventArgs e)
{
if (rdChecked != -1)
{
RadioButton rdSelection = DateGrid.Rows[rdChecked].FindControl("RowSelector") as RadioButton;
rdSelection.Checked = false;
}
for (int i = 0; i < DateGrid.Rows.Count; i++)
{
RadioButton rdSelection = DateGrid.Rows[i].FindControl("RowSelector") as RadioButton;
if (rdSelection.Checked)
{
rdChecked = i;
}
}
}
你想做的就是这样吗?@MartínMisol我想做的是只选择一个单选按钮。我的gridview选择了多个在我链接的文章中,图11显示了一个与您遇到的问题类似的问题,然后详细解释了解决方案。@MartínMisol谢谢,它现在可以工作了:
static int rdChecked = -1; //Use this variable to store the last checked row
protected void rd_CheckedChanged(object sender, EventArgs e)
{
if (rdChecked != -1)
{
RadioButton rdSelection = DateGrid.Rows[rdChecked].FindControl("RowSelector") as RadioButton;
rdSelection.Checked = false;
}
for (int i = 0; i < DateGrid.Rows.Count; i++)
{
RadioButton rdSelection = DateGrid.Rows[i].FindControl("RowSelector") as RadioButton;
if (rdSelection.Checked)
{
rdChecked = i;
}
}
}
<asp:GridView ID="DateGrid" runat="server" DataSourceID="sdsData">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:RadioButton ID="chk" ClientIDMode="Static" runat="server" onclick="$('[id=chk]').prop('checked' , '');$(this).prop('checked' , 'checked');"></asp:RadioButton>
<asp:HiddenField ID="hdn" runat="server" Value='<%# Eval("Fserial") %>' />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" Width="20px" />
</asp:TemplateField>
<asp:BoundField DataField="Fname" HeaderText="Name" SortExpression="Fname" />
</Columns></asp:GridView>