0

こんにちは、以下に説明するような同様の問題に遭遇した人はいますか

いくつかの 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 に存在する値がポストバックされ、これが原因である可能性があることはわかっています。

4

1 に答える 1

0

ddlをバインドするためにsqldatasourceを使用していますか?? はいの場合、データを選択するすべてのステートメントの前に書き込みます

dropdown1.databind(); 

例えば

crane_requirement_Frequency_40T0.Items.FindByText(mydatatable.Tables(0).Rows(0)(‌​32).ToString).Selected = True 

となります

crane_requirement_Frequency_40T0.DataBind();
crane_requirement_Frequency_40T0.Items.FindByText(mydatatable.Tables(0).Rows(0)(‌​32).ToString).Selected = True
于 2013-04-30T09:39:10.783 に答える