2012-10-25 40 views
3

我有一個GridView像這樣:無法通過OnRowEditing事件EditTemplate找到控制

<asp:GridView runat="server" ID="grdPractices" PageSize="10" AutoGenerateColumns="False" DataKeyNames="Id" 
    CssClass="linkGrid" AllowSorting="True" OnSorting="grdPractices_OnSorting" OnRowDataBound="grdPractices_OnRowDataBound" 
    OnRowEditing="grdPractices_OnRowEditing" OnRowCancelingEdit="grdPractices_OnRowCancelingEdit" OnRowUpdating="grdPractices_OnRowUpdating"> 
    <Columns> 
     <asp:BoundField DataField="Name" HeaderText="Name" meta:resourcekey="PracticeName" ReadOnly="True" SortExpression="Name" ItemStyle-Width="400px" /> 
     <asp:BoundField DataField="Code" HeaderText="Code" meta:resourcekey="Code" ReadOnly="True" SortExpression="Code" ItemStyle-Width="200px" /> 
     <asp:TemplateField meta:resourcekey="SiteName" ItemStyle-Width="200px" SortExpression="SiteName"> 
      <ItemTemplate> 
       <asp:Literal runat="server" Text='<%# Eval("SiteName") %>' /> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:DropDownList runat="server" ID="lstSites" /> 
      </EditItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField meta:resourcekey="NumOfUsers" ItemStyle-Width="200px" SortExpression="NumOfUsers"> 
      <ItemTemplate> 
       <asp:LinkButton runat="server" OnCommand="OnLinkButtonCommand" CommandName="ViewUsers" Text='<%# Eval("NumOfUsers") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:CommandField ShowDeleteButton="False" ShowCancelButton="True" 
      ShowInsertButton="False" ShowEditButton="True" EditText="Edit" 
      CancelText="Cancel" UpdateText="Update" meta:resourcekey="Edit" ItemStyle-Width="200px" /> 
    </Columns> 
</asp:GridView> 

,這裏是爲OnRowEditing事件的代碼:

protected void grdPractices_OnRowEditing(object sender, GridViewEditEventArgs e) 
{ 
    this.grdPractices.EditIndex = e.NewEditIndex; 

    var sitesDropDown = this.grdPractices.Rows[e.NewEditIndex].Controls[0].FindControl("lstSites") as DropDownList; 

    if (sitesDropDown == null) 
    { 
     return; 
    } 
} 

我的問題是,我不能讓一個控制位於EditTemplate中的lstSites控件。我已經嘗試使用以下:

  • this.grdPractices.Rows [e.NewEditIndex] .Controls [0] .FindControl( 「lstSites」) 作爲DropDownList的;
  • this.grdPractices.Rows [e.NewEditIndex] .FindControl(「lstSites」)as DropDownList;
  • this.grdPractices.Rows [e.NewEditIndex] .FindControlRecursive(「lstSites」) as DropDownList;

結果總是相同的,返回NULL

在OnRowEditing事件中,您應該如何獲得連續的控件?

回答

1

OK,我沒有做這行後:

this.grdPractices.EditIndex = e.NewEditIndex;

然後重新綁定網格的數據。所以重新綁定數據,然後調用後:

var sitesDropDown = this.grdPractices.Rows[e.NewEditIndex].FindControlRecursive("lstSites") as DropDownList; 

我現在能夠與siteDropDown變量相互作用,因爲它現在包含到lstSites控制的參考。

0

嘗試使用GridViewRow如下...

protected void grd_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    GridViewRow selectRow = grd.Rows(e.NewEditIndex); 
    DropDownList sitesDropDown =(DropDownList)selectRow.Cells[2].FindControl("lstSites"); 
} 
+0

嘗試了你的建議,但沒有我害怕的喜悅。我會稍微鼓勵它,但是有時候會這樣我恨ASP.NET WebForms並且更喜歡ASP.NET MVC。更少麻煩。 –