こんにちは、以下に説明するような同様の問題に遭遇した人はいますか
いくつかの DDL とテキスト ボックスを含む Web フォームがあります。
DDL には、 Yes 、 No 、または頻繁に、定期的に、なしのような 3 つまたは 4 つの値があります。
ユーザーは値を選択し、選択結果をSQLサーバーに保存でき、保存時にレコード番号が生成されます。
また、RecordSrchId というサブルーチンを介して、同じレコード番号から結果を取得することもできます。
たとえば、DDL には、アイテムのリストの値として、はい、いいえの結果が含まれます。SQLから取得されたデータはデータテーブルに表示され、値はアイテムの正しいIDを介してカスケードダウンされます。 (2) は、Label コントロールでこれをテストしたため、mydatatable から値を取得する項目番号であり、null を返さず、DDl には正しいケース形式の値の正しいリストがありますが、何らかの理由で以下のエラー
オブジェクト参照がオブジェクト インスタンスに設定されていません。
説明:
An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
ソース エラー:
Line 1148:
Line 1149: crane_requirement_Frequency_40T0.Items.FindByText(mydatatable.Tables(0).Rows(0)(32).ToString).Selected = True Line 1150: Line 1151:
Source File: C:\inetpub\wwwroot\aspx\factfind\Default.aspx.vb Line: 1149
Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]
FactFindMenu.recordidsrch() in C:\inetpub\wwwroot\aspx\factfind\Default.aspx.vb:1149
FactFindMenu.Srch_Record_Click(Object sender, EventArgs e) in C:\inetpub\wwwroot\aspx\factfind\Default.aspx.vb:1090
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
日付を取得するサブルーチンは以下のとおりです
Private Sub recordidsrch()
Dim searchFactfnd As New SearchFactFnd ' custom class used to retrive data From sql server
Dim mydatatable As New Data.DataSet ' Dataset/table used
mydatatable = searchFactfnd.FactFNDTableID(Rcrd_num_Txt.Text) ' populates the dataset with the function FactFNDTableID via a record Id gained from a textbox and function returns a dataset/table
contact_name.Text = mydatatable.Tables(0).Rows(0)(1).ToString
crane_hireCranesFrequency.Items.FindByText(mydatatable.Tables(0).Rows(0)(30).ToString)
crane_spendPA.Text = mydatatable.Tables(0).Rows(0)(31).ToString
crane_requirement_Frequency_40T.Items.FindByText(mydatatable.Tables(0).Rows(0)(32).ToString).Selected =True ' Line give error if i include .Selected =True
Label4.Text = mydatatable.Tables(0).Rows(0)(32) ' gives me a result that can be found in the DDL
end sub
The HTML code dor the DDL is
<asp:DropDownList ID="crane_requirement_Frequency_40T" runat="server" CssClass="largeinput" AutoPostBack="True">
<asp:ListItem>Crane Requirements Frequency</asp:ListItem>
<asp:ListItem>Regularly</asp:ListItem>
<asp:ListItem>Often</asp:ListItem>
<asp:ListItem>Seldom</asp:ListItem>
<asp:ListItem>Never</asp:ListItem>
</asp:DropDownList>
I have tried several variations of the below
Items.FindByText(mydatatable.Tables(0).Rows(0)(32).ToString).Selected =True
Items.FindByvalue(mydatatable.Tables(0).Rows(0)(32).ToString).Selected =True
ddl.selectedvalue
ddl.selecteditem
if not ispostback then
'populate
end if
ddl.clearcontents
html ddlを以下に書き換えてみましたが、上記のバリエーションを試してもうまくいきませんでした
<asp:DropDownList ID="crane_requirement_Frequency_40T" runat="server" CssClass="largeinputd">
<asp:ListItem Text="Crane Requirements Frequency"Value="" />
<asp:ListItem Text="Regularly" Value="Regularly" />
<asp:ListItem Text="Often" Value="Often" />
<asp:ListItem Text="Seldom" Value="Seldom" />
</asp:DropDownList>
データセットの値が正しく、null ではなく、DDL に存在する値がポストバックされ、これが原因である可能性があることはわかっています。