Вы можете использовать переключатели и функцию столбца «Шаблон» в GridView. Разметка GridView будет выглядеть так:
<asp:GridView ID="gvTest" runat="server" AutoGenerateColumns="false"
OnRowDataBound="gvTest_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="Column 1">
<ItemTemplate>
<asp:RadioButton ID="rbSelect1" runat="server" Text="" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Column 2">
<ItemTemplate>
<asp:RadioButton ID="rbSelect2" runat="server" Text="" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Хитрость заключается в том, чтобы правильно установить свойство «GroupName» каждой радиокнопки, чтобы каждый ряд результирующей сетки обрабатывался браузером как одна группа радиокнопок. Вот где в игру вступает обработчик OnRowDataBound, указанный в сетке. Определение метода-обработчика 'gvTest_RowDataBound' может выглядеть примерно так:
protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
RadioButton rb1 = (RadioButton)e.Row.FindControl("rbSelect1");
RadioButton rb2 = (RadioButton)e.Row.FindControl("rbSelect2");
rb1.GroupName = rb2.GroupName = string.Format("Select_{0}", e.Row.RowIndex);
}
}
Добавляя индекс строки к имени группы для обеих переключателей в каждой строке, вы гарантируете, что браузер будет обрабатывать их как группу и разрешать выбор только одного значения в строке. Результат будет выглядеть примерно так: