簡體   English   中英

在GridView中啟用和禁用按鈕

[英]Enabling And Disabling Buttons In GridView

我在gridview中添加了一個按鈕列。 我正在使用數據通過代碼填充gridview,然后將數據綁定到網格。

我現在需要查看數據的第一列,並檢查列的文本是否為“NA”,如果它是該列中的按鈕必須被禁用.....

我怎么能做到這一點? 我正在從代碼中填充數據,並且按鈕被預先添加到標記中的網格中

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


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

最好的辦法是在TemplateColumnButton實現OnDataBinding方法。

例如:

<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值相比,而不是視覺輸出(這可能與渲染和檢查的業務邏輯相關)。

希望有所幫助。

在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"添加到OnDataBound="GridView1_DataBound"的標記中。

也許這樣的事情。 按鈕有點不同

<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

你可以嘗試從標記為,

 <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>

也許您可以使用OnRowDataBound =“GridViewRowEventHandler”將值設置為啟用或禁用?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM