Включение и отключение кнопок в GridView - PullRequest
4 голосов
/ 26 июля 2011

Я добавил столбец кнопки в сетку.Я заполняю сетку с помощью кода через таблицу данных, а затем связываю таблицу с сеткой.

Теперь мне нужно посмотреть на первый столбец данных и проверить, является ли текст столбца «NA», если это кнопка в этом столбце, должна быть отключена .....

Как мне это сделать?Я заполняю данные из кода, и кнопка добавляется к сетке в разметке

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand">
    <Columns>
        <asp:ButtonField Text="Delete" />
    </Columns>
</asp:GridView>


GridView1.DataSource = dt;
GridView1.DataBind();

Ответы [ 5 ]

5 голосов
/ 26 июля 2011

Лучше всего реализовать метод OnDataBinding для Button в TemplateColumn.

Например:

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button runat="server" ID="btnDelete" CommandName="Delete" 
                    Text="Delete" OnDataBinding="btnDelete_DataBinding" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Затем в вашем коде реализовать свою логику:

protected void btnDelete_DataBinding(object sender, System.EventArgs e)
{
    Button btn = (Button)(sender);
    btn.Enabled = !Eval("TheFieldInYourDataSourceToCompare").ToString().Equals("NA");
}

Преимущество такого подхода перед другими опубликованными ответами:

  1. Нет кода в вашей разметке
  2. Код локализован для Button и может использоваться повторно, если другие Buttons требуют такой же функциональности.
  3. Сравнение со значением DataSource, а не с визуальным выводом (это может быть связано с бизнес-логикой как для рендеринга, так и для проверки).

Надеюсь, это поможет.

1 голос
/ 26 июля 2011

Попробуйте это в обработчике событий DataBound:

protected void GridView1_DataBound(object sender, EventArgs e)
{

    for (int i = 0; i < GridView1.Rows.Count; i++)
    {

        if (GridView1.Rows[i].Cells[1].Text == "NA")
        {
          // Disable the button
        }
    }
}

Это всего лишь общая идея.Вам придется изменить код для вашего приложения.

Не забудьте добавить OnDataBound="GridView1_DataBound" в разметку для GridView.

1 голос
/ 26 июля 2011

Может быть, что-то вроде этого.Неужели кнопка немного по-другому

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button runat="server" ID="Btn_Delete" CommandName="Delete" Text="delete" 
                    Enabled='<%# GridView1.Rows[0].Cells[1].Text != "NA" %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Вам скорее всего понадобится Eval ("someColumn") вместо GridView1.Rows [0] .Cells [1] .Text

0 голосов
/ 14 сентября 2012

вы можете попробовать из разметки как,

 <asp:TemplateField HeaderText="QA signature">
                                     <EditItemTemplate>
                                         <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Column6") %>'></asp:TextBox>
                                     </EditItemTemplate>
                                     <ItemTemplate>
                                         <asp:Label ID="Label3" runat="server" Text='<%# Eval("Column6") %>' Visible='<%# Eval("Column6") != "" %>'  ></asp:Label>
                                         <asp:Button ID="Button2" runat="server" Text="Sign Off" CssClass="cmdButton" Visible='<%# Eval("Column6") == "" %>'  />
                                     </ItemTemplate>
                                 </asp:TemplateField>
0 голосов
/ 26 июля 2011

Возможно, вы можете использовать OnRowDataBound = "GridViewRowEventHandler", чтобы установить значение для включения или отключения?

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