2016-11-14 9 views
0

私は、ストアドプロシージャとC#を使用してデータベースからドロップダウンリストにデータをバインドする正しい方法を知りたいと思います。私はempFnameの列を持つEmployeeテーブルと、empFnameの列を持つEmployeeテーブルの値に一致する@fnameのパラメータを持つストアドプロシージャselectEmployeePaycheckを持つドロップダウンリストddlEmployeesを持っています。一番下のコードを使ってデータベースからデータをバインドしていますが、残念ながらそれは機能しません。C#とストアドプロシージャを使用したデータベースからのドロップダウンリストのバインド

SqlConnection con; 
SqlCommand cmd; 
SqlDataAdapter adr; 
DataTable dt; 
string conStr; 

conStr = ConfigurationManager.ConnectionStrings["payRollConnection"].ConnectionString; 
con = new SqlConnection(conStr); 
con.Open(); 
cmd = new SqlCommand("selectEmployeePayCheck", con); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.AddWithValue("@fname", ddlEmployees.SelectedValue); 
adr = new SqlAdapter(cmd); 
dt = new DataTable(); 
adr.Fill(dt); 
cmd.ExecuteReader(); 
ddlEmployees.DataTextField = "empFname"; 
ddlEmployees.DataValueField = "empFname"; 
ddlEmployees.DataSource = dt; 
ddlEmployees.DataBind(); 
cmd.Dispose(); 
con.Close(); 

提案、修正、回答は非常によく受け入れられています。

ここ
+2

あなたはそれが起こっていない何が起こっていることは動作しないと言うときは?また、一意名のような名前を使用するときは注意してください。 2人のJohnsがあなたのために働いていれば、間違ったデータが返されます。最も良い方法は通常、あなたのデータベースにユニークなid列を持ち、それをクエリや結合などに使用することです。 – ThatChris

+0

問題はここにあると思います。 'cmd.Parameters.AddWithValue(" @ fname "、ddlEmployees.SelectedValue);' 'ddlEmployees'にデータをバインドする前にFNameを一意の値として渡していますか? –

+0

@ChristopherTrevorが有効なポイントを作成しました。私が感じ取ることができるもう一つの問題はウェブデザインです。 empFNameをddlEmployeesからストアド・プロシージャに渡し、同じ結果を同じddlEmployeesにバインドしようとしています。ストアドプロシージャの結果が1つだけの場合は、ラベルまたは異なるコントロールを使用します。複数の結果が予想される場合は、別のddlを使用してバインドしてください。 –

答えて

1
フィールドセットする前にデータソースを移動することで

てみてください、また、あなたがexcute必要としない読者

adr.Fill(dt); 
//cmd.ExecuteReader(); 
//set data source first 
ddlEmployees.DataSource = dt; 
ddlEmployees.DataTextField = "empFname"; 
ddlEmployees.DataValueField = "empFname"; 
ddlEmployees.DataBind(); 
+0

'if(!IsPostBack) {con = new SqlConnection(conStr); \t \t \t con.Open(); \t \t \t cmd =新しいSqlCommand( "selectContractorPayCheck"、con); \t \t \t cmd.CommandType = CommandType.StoredProcedure; \t \t \t cmd.Parameters.AddWithValue( "@ fname"、ddlContractor.SelectedValue); \t \t \t adr = new SqlDataAdapter(cmd); \t \t \t dt = new DataTable(); \t \t \t adr.Fill(dt); \t \t \t ddlContractor.DataSource = dt; \t \t \t ddlContractor.DataTextField = "conFname"; \t \t \t ddlContractor.DataValueField = "conFname"; \t \t \t ddlContractor.DataBind(); \t \t} –

+0

ストアドプロシージャコードで見積りを更新できますか?例外はありますか? – Damith

+0

これは私が使用するストアドプロシージャである: ここで、Iはコードブロックを実行すると、私が得るconFname = @fname end' 例外契約から 選択conFnameを開始するように 'のproc selectContractorPayCheck @fnameのVARCHAR(30) を作成最近変更されたのは、ドロップダウンリストがデータベースからデータをバインドしていないということです。 –

1

のコメントを見て、私はあなたのシナリオであると信じるものを元の質問は以下の通りである。

従業員レコードと給与明細のある種類のテーブルを含む従業員テーブルがあります。

あなたが達成しようとしているのは、ユーザーが給与をドロップダウンに表示する従業員を選択したときです。

このような場合は、次のように私はそれに近づくでしょう:

使用2 dropdownlists、あなたの従業員用と給料レコードのための1つを。

Damithsの回答コードを使用して、従業員のプルダウンを入力します。このドロップダウンで自動ポストバックが有効になっていること、およびこのドロップダウンでselectedindexchangedイベントにフックしていることを確認してください。

選択された索引変更イベントで、ddlEmployee.selectedvalueを使用して元のコードを使用して、選択した従業員を取得し、給与のドロップダウンを設定します。また

、あなたは

if(!isPostback) 
{ 

} 

でラップPage_Loadイベントであなたの従業員のドロップダウンを移入している場合はそれ以外のドロップダウンがへの最初の従業員の給与レコードを引き起こし、すべてのポストバックに再移植することを確認してください常に表示されます。

この回答が、あなたが従う必要がある方向を知るのに役立つことを願っています。

SqlConnection con; 
SqlCommand cmd; 
SqlDataAdapter adr; 
DataTable dt; 
string conStr; 

conStr = ConfigurationManager.ConnectionStrings["payRollConnection"].ConnectionString; 
using(con = new SqlConnection(conStr)) { 
     using(cmd = new SqlCommand("selectEmployeePayCheck", con)) { 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("@fname", ddlEmployees.SelectedValue); 
     // or cmd.Parameters.AddWithValue("@fname", ddlEmployees.SelectedText.ToString()); 
     // according to your query at the backend 
     adr = new SqlAdapter(cmd); 
     dt = new DataTable(); 
     adr.Fill(dt); 
     } 
    } 

ddlEmployees.DataSource = dt; 
ddlEmployees.DataTextField = "empFname"; 
ddlEmployees.DataValueField = "empFname"; 
ddlEmployees.DataBind(); 

はそれが役に立てば幸い:

2

私はこれでそれを置き換える、あなたのコードに小さな変更を行いました。 :)

関連する問題