次のように、xaml でデータグリッド テンプレート列を宣言しています。
<sdk:DataGridTemplateColumn x:Name="MyColumn" Header="User">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
x:Name="comboBox1" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
次に、コンボボックスに次のように入力しようとします。
DataServiceQuery<SystemUser> query = (DataServiceQuery<SystemUser>)_context.SystemUserSet;
query.BeginExecute(OnUserSearchComplete, query);
(InitializeComponent() 行の後に実行)
その後:
private void OnUserSearchComplete(IAsyncResult result)
{
var query = result.AsyncState as DataServiceQuery<SystemUser>;
IEnumerable<SystemUser> response = query.EndExecute(result);
ComboBox comboBox1 = (DataGrid.Columns[4] as DataGridTemplateColumn).CellTemplate.LoadContent() as ComboBox;
// Enumerate over the results of the query
foreach (SystemUser record in response)
{
comboBox1.Items.Add(record.FullName);
}
}
ただし、CRM でアプリケーションを実行すると、コンボボックスにシステム ユーザーが入力されません。誰かが私が間違っていることを説明できますか? 私は今、いくつかの異なるアプローチを試しましたが、それを機能させることができないようです..
ありがとう、
ジャック
編集; デバッグ:
- 応答は 3 つのシステム ユーザー オブジェクトを返します - これは正しいです。
- コンボ ボックス 1 がヌルに等しくありません。
これが私のグリッドのレイアウト方法です(SDKの例と同様):
EDIT2; なんらかの理由で、私のコードが foreach ループに入っていないように見えますが、アイデアはありますか?
EDIT3; わかりましたので、Andrew が以下の回答で提供した情報を使用して、次のコードを作成しました。
//Removed for brevity
<sdk:DataGridTemplateColumn x:Name="SalesmanColumn" Header="Salesman" Width="150">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
x:Name="comboBox1"
ItemsSource="{Binding SystemUsers, ElementName=MyUserControl}"
/>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
//Removed for brevity
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</Grid>
残念ながら、バインディングが機能していないようです。これは、文字列ビルダーとテキスト ボックスを使用して、CRM から取得したユーザー名を保存および表示し、すべて正しく取得されたためです。コンボボックスに表示されません。私のバインディングが間違っている理由を誰か説明できますか?