Проверка записей в ASP.NET GridView без JavaScript - PullRequest
1 голос
/ 04 декабря 2009

Фон

У меня есть GridView, где вход в Column1 зависит от входа Column2.

  • Если пользователь вводит N в Column2, система введет Y в Column1.

Validatons реализуются с использованием Regexs и пользовательской проверки. Я бы предпочел решение для проверки, которое не использует JavaScript.

|Column1| Column2|
__________________
| Y     | N
__________________
|N      | Y
__________________
|N      | N

Вопрос

Как я могу проверить эти записи в Gridview без использования JavaScript?

Ответы [ 2 ]

3 голосов
/ 04 декабря 2009

Почему бы не использовать две радиокнопки?

<asp:templatefield>
  <itemtemplate>
    <asp:radiobutton id="rbYes" runat="server" groupname="YesNo" text="Yes" />
    <asp:radiobutton id="rbNo" runat="server" groupname="YesNo" text="No" />
  </itemtemplate>
</asp:templatefield>
1 голос
/ 05 декабря 2009

Вы можете использовать переключатели и функцию столбца «Шаблон» в 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);
    }
}

Добавляя индекс строки к имени группы для обеих переключателей в каждой строке, вы гарантируете, что браузер будет обрабатывать их как группу и разрешать выбор только одного значения в строке. Результат будет выглядеть примерно так:

GridView screenshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...