2011-05-28 53 views
1

我試圖訪問內部的GridView定位服務器的控制,但我沒有想法怎麼做.. 這裏是我的嘗試:如何獲取GridView中的服務器控件ID?

<asp:GridView .... 
..... 
    <Columns> 
    <asp:TemplateField> 
     ... 
     .. 
     <EditItemTemplate> 
     <asp:TextBox ID="txtName"runat="server" Text='<%# Bind("Name") %>' /> 
     </EditItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="edit" ItemStyle-CssClass="td" 
         HeaderStyle-CssClass="listtitle"> 
     <ItemTemplate> 
     <asp:ImageButton ID="btnEdit" runat="server" CommandName="Edit" 
         AlternateText="edit" ImageUrl="~/css/images/edit-icon.png" /> 
     </ItemTemplate> 
     <EditItemTemplate> 
     <asp:LinkButton ID="btnUpdate" runat="server" CommandName="Update" Text="Save" 
         OnClientClick="javascript:return isValid('<%= txtName.ClientID%>')" /> | 
     <asp:LinkButton ID="btnCancel" runat="server" 
         CommandName="Cancel" Text="Cancel" /> 
     </EditItemTemplate> 
    </asp:TemplateField> 
    ... 
    .. 
    </Columns> 
    ..... 
    .... 
</asp:GridView> 

的問題是在這裏

OnClientClick="javascript:return isValid('<%= txtName.ClientID%>')" 

當它到達isValid函數時,我看到字符串「<%= txtName.ClientID%>」,而不是實際的控制器ID,因爲我應該...

所以問題是我該如何發送id到JS腳本?

回答

0

ibrams答案將是正確的,如果它是字段在ItemTemplate。但是,當你在EditItemTemplate之一時,也不能檢查RowState。該條件將是這樣的

if ((e.Row.RowState == (DataControlRowState.Edit | DataControlRowState.Alternate)) || (e.Row.RowState == DataControlRowState.Edit)) 
{ 
    //logic here 
} 

但更短的解決方案將檢查這個條件GridView1.EditIndex == e.Row.RowIndex

的片段應該是這樣的。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow && GridView1.EditIndex == e.Row.RowIndex) 
    { 
     TextBox txt = (TextBox)e.Row.FindControl("txtName"); 
     LinkButton btn = (LinkButton)e.Row.FindControl("btnUpdate"); 
     string script = String.Format("javascript:return isValid('{0}')", btn.ClientID); 
     btn.Attributes.Add("onclick", script); 
    } 
} 
0

在RowDataBound事件中,您需要讀取您的txtName的客戶端ID並設置您的linkbutton的OnClientClick。

void myGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     TextBox txt = (TextBox)e.Row.FindControl("txtName"); 
     Button btn = (LinkButton)e.Row.FindControl("btnUpdate"); 
     btn.OnClientClick = String.Format("javascript:return isValid('{0}')", btn.ClientID); 
    } 
} 
+0

ibram,很好的解決方案。但是你錯過了edititemtemplate部分 – naveen 2011-05-29 07:17:01

0

正如你想要驗證txtName文本框的值,它更好地利用標準的asp.net驗證控件。如果您有一些完整的驗證規則,那麼您可以使用CustomValidator並指定用於處理客戶端驗證的javascript函數。只需爲連接到txtName控件和btnUpdate按鈕的驗證程序設置相同的驗證組值。

相關問題