2013-04-11 39 views
0

我有一個gridview。 gridview有一個保存文本的文本框多行。之後,我有一個名爲批准的圖像按鈕列,一個名爲未批准。我想在單擊批准或未批准之前強制用戶閱讀多行框內的文本。我怎樣才能實現這個程序化?我知道我應該創建一個Rowdatabound事件,但是我應該如何處理代碼?我正在使用C#ASP.NET Web應用程序。Gridview點擊行啓用控件

+0

它不是'rowdatabound'事件 – 2013-04-11 08:19:41

+0

將jscript添加到按鈕,使輸入到多行框。 – Vladimir 2013-04-11 08:23:16

+0

我相信這是rowdatabound,因爲我想要的是:當用戶點擊特定的行時,這一行中的兩個圖像按鈕將被啓用。否則圖像按鈕將被禁用。 – Equilibrium 2013-04-11 08:40:17

回答

0

我知道你可以使用javascript來跟蹤瀏覽器的滾動條,但我個人從來沒有遇到過類似的文本框功能。我會建議嘗試一個稍微不同的方法,爲什麼不添加一個額外的列給你的網格視圖有一個複選框控制 - 我已閱讀並接受協議。而審批時複選框被選中按鈕纔會enabledd,這裏有一個例子:

ASPX:

<div> 
    <asp:ScriptManager ID="sm" runat="server" /> 
    <asp:UpdatePanel ID="updatePanel" runat="server"> 
     <ContentTemplate> 
      <asp:GridView ID="grid" runat="server" AutoGenerateColumns="false" OnRowDataBound="grid_RowDataBound"> 
       <Columns> 
        <asp:TemplateField> 
         <ItemTemplate> 
          <asp:TextBox TextMode="MultiLine" runat="server" ID="txtAgreement" Text='<%# Eval("Agreement") %>' /> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField> 
         <ItemTemplate> 
          I have read and accepted the agreement 
          <asp:CheckBox ID="chkAgreement" AutoPostBack="true" runat="server" OnCheckedChanged="CheckedChanged" /> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField> 
         <ItemTemplate> 
          <asp:Button ID="btnAccept" runat="server" Text="Accept" OnClick="Accept" /> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 

後面的代碼:

public partial class Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      var items = new List<License> { new License { Agreement = "Agreement 1" }, new License { Agreement = "Agreement 2" } }; 
      grid.DataSource = items; 
      grid.DataBind(); 
     } 
    } 

    protected void Accept(object sender, EventArgs e) 
    { 
    } 

    protected void grid_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
      (e.Row.FindControl("btnAccept") as Button).Enabled = false; 
    } 

    protected void CheckedChanged(object sender, EventArgs e) 
    { 
     var chkAgreement = sender as CheckBox; 
     Button btnAccept = null; 

     if (chkAgreement != null) 
     { 
      var row = chkAgreement.Parent.Parent as GridViewRow; 
      btnAccept = row.FindControl("btnAccept") as Button; 

      if (btnAccept != null) 
       if (chkAgreement.Checked) 
        btnAccept.Enabled = true; 
       else 
        btnAccept.Enabled = false; 
     } 
    } 
} 

public class License 
{ 
    public string Agreement { get; set; } 
}