2014-02-05 71 views
3

我有一個GridView,我需要能夠以編程方式更改編輯模板中TextBox的值。當我嘗試在onRowDataBound期間訪問它時,我得到:更改GridView編輯模板中控件的值

異常詳細信息:System.NullReferenceException:未將對象引用設置爲對象的實例。

我在想,在onRowDataBound方法中,編輯模板控件不可訪問。但是,當我嘗試在onRowEditing方法中編輯TextBox的值時,GridViewEditEventArgs對象沒有.Row選項,因此看起來您無法訪問onRowEditing方法中的編輯模板中的控件。

任何想法如何以編程方式更改GridView的編輯模板中的文本框的值?

ASP.NET Web窗體,.NET 4.0,C#

====

編輯#1:這是我現在有。 txtMiles對象在RowEditing中最終爲null。

<asp:TemplateField HeaderText="Miles Frequency"> 
        <ItemTemplate> 
         <asp:Label ID="lblFreqMiles" runat="server" Text='<%# Eval("FrequencyMiles") %>'></asp:Label> 
        </ItemTemplate>      
        <EditItemTemplate > 
         <asp:TextBox ID="txtFreqMiles" runat="server" Text='<%# Eval("FrequencyMiles")%>' Width="50px"></asp:TextBox> 
         <asp:RequiredFieldValidator runat="server" ID="req1" ControlToValidate="txtFreqMiles" ErrorMessage="*" /> 
         <asp:CompareValidator ID="CompareValidator1" runat="server" Operator="DataTypeCheck" Type="Integer" ControlToValidate="txtFreqMiles" ErrorMessage="Value must be a whole number." /> 
        </EditItemTemplate> 
       </asp:TemplateField> 


    protected void gvMaint_RowEditing(object sender, GridViewEditEventArgs e) 
      { 
       //format Miles Frequency column 
       GridViewRow row = grvMaint.Rows[e.NewEditIndex]; 
       TextBox txtMiles = (TextBox)row.FindControl("txtFreqMiles"); 
       if (txtMiles.Text == "999999") 
       { 
        //do stuff 
       } 

       grvMaint.EditIndex = e.NewEditIndex; 
       populateMaintGrid(); 
      } 

回答

4

只要確保該行是在編輯模式下,你嘗試之前,並得到了控制:

protected void gvMaint_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowState == DataControlRowState.Edit) 
    { 
     TextBox txtFreqMiles = (TextBox)e.Row.FindControl("txtFreqMiles"); 

     // At this point, you can change the value as normal 
     txtFreqMiles.Text = "some new text"; 
    } 
} 
+0

謝謝,但是這給了一個空引用異常:對象引用不設置到對象的實例。我確保將所有顯而易見的東西都變成控件的實際ID,例如更改「yourTextBoxID」。當我嘗試訪問TextBox對象的.Text值時,它會發出異常。 TextBox對象爲null。 – flying227

+2

@ flying227我覺得我是個白癡。更新了我的答案。我在想(根據你的評論)你需要將該行作爲數據綁定來控制這個數據,所以你必須使用RowDataBound事件。但是你需要確保行處於編輯模式。 – jadarnel27

+0

工作,非常感謝你! – flying227