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();
}
謝謝,但是這給了一個空引用異常:對象引用不設置到對象的實例。我確保將所有顯而易見的東西都變成控件的實際ID,例如更改「yourTextBoxID」。當我嘗試訪問TextBox對象的.Text值時,它會發出異常。 TextBox對象爲null。 – flying227
@ flying227我覺得我是個白癡。更新了我的答案。我在想(根據你的評論)你需要將該行作爲數據綁定來控制這個數據,所以你必須使用RowDataBound事件。但是你需要確保行處於編輯模式。 – jadarnel27
工作,非常感謝你! – flying227