0

これは非常に単純な質問のように思えるかもしれませんが、私はこれを理解できません (私は XAML を初めて使用します)。データテーブルにバインドして、コンボボックスにデータを入力しています。テーブルの主キーは S_ID です。SelectionChanged イベントで選択されたアイテムのこの値を取得する必要があるため、この値に基づいて詳細を読み込むことができます。int i = cboSites.SelectedItem を試しましたが、S_ID が int であっても型が一致しません。i をオブジェクト型に設定すると、デバッグ モードで DatarRowView の値を表示できますが、それ以外の方法でデータにアクセスすることはできません。私が間違っていることを教えてください。私は多くの調査を行いましたが、読んだコードは問題ないように見えますが、明らかにそうではありません! ちなみに、コンボボックスにはデータが完全に正常に入力されます。どうもありがとう。

C#

try
{
     SqlDataAdapter sqlAd = new SqlDataAdapter();
     SqlCommand sqlComm = new SqlCommand("SP_SelectAllSiteNamesForCust", sqlConn);
     sqlComm.CommandType = System.Data.CommandType.StoredProcedure;
     DataSet dSet = new DataSet();
     sqlAd.SelectCommand = sqlComm;
     sqlAd.Fill(dSet);
     DataTable sitesTable = dSet.Tables[0];
     cboSites.ItemsSource = sitesTable.DefaultView;

 } 

XAML

 <ComboBox Height="28" IsEditable="True" Margin="630,15,28,10" 
           Name="cboSites" TabIndex="6" 
           ItemsSource="{Binding}" 
           DisplayMemberPath="S_Name" 
           SelectedItem="{Binding Path=S_ID}"  
           SelectionChanged="cboSites_SelectionChanged" /> 

SQL ストアド プロシージャ

SELECT 
[S_ID],
[S_Name]
FROM
[dbo].[tbl_Site]
WHERE [C_ID] = @CUSTID       
4

2 に答える 2

1

SelectedItem の代わりに SelectedValue を使用します。

<ComboBox ItemsSource="{Binding}" DisplayMemberPath="S_Name" 
          SelectedValuePath="S_ID" SelectedValue="{Binding Path=Int_Property_In_The_ViewModel}"/>
于 2013-02-04T18:14:40.693 に答える
0

コレクション内のすべてのアイテムは、バインドしている DataView のテーブルの行のようなものであるため、型の不一致が発生しています。したがって、cboSites_SelectionChanged では、次のような S_ID を取得できます。

var s_id = int.Parse(((DataRowView)cboSites.SelectedItem)["S_ID"].ToString());

ここでは、型にキャストcboxSites.SelectedItemしてからDataRowView、インデクサーを使用して S_ID 値を取得しています。次に、その値を文字列に変換し、整数変数に解析します。

于 2013-02-04T18:25:14.020 に答える