作成日: 2015/04/17 最終更新日: 2015/09/16
文書種別
不具合
状況
修正済み
詳細
C1TrueDBDropdownに同じ文字列を設定した項目が複数ある場合、下記のふたつの事象が発生します。
事象1:リストから項目を選択し、続けてリストを表示すると、リスト項目内の最初の項目(同じ文字列の最初の項目)が選択される
事象2:事象1が発生したのち、キー入力またはクリックにて他のセルにフォーカスを移動すると「入力文字列の形式が正しくありません」というメッセージが表示される
◎サンプルコード(VB)
【再現手順】
1.サンプルを実行します
2.ColumnAのセルを選択します
3.プルダウン(▼)をクリックします
4.プルダウンに表示される一番下の項目("AAA")を選択します
5.再度プルダウン(▼)をクリックします
結果:一番初めの項目("AAA")が選択されてます(事象1)
6.続けてリストが表示された状態でColumnAの他のセルをクリックします
結果:「入力文字列の形式が正しくありません」というメッセージが表示されます(事象2)
事象1:リストから項目を選択し、続けてリストを表示すると、リスト項目内の最初の項目(同じ文字列の最初の項目)が選択される
事象2:事象1が発生したのち、キー入力またはクリックにて他のセルにフォーカスを移動すると「入力文字列の形式が正しくありません」というメッセージが表示される
◎サンプルコード(VB)
' データの作成
Dim dt As New DataTable("DATA")
dt.Columns.Add("ColumnA", GetType(Int32))
For i As Integer = 0 To 10
dt.Rows.Add(i Mod 3)
Next
dt.AcceptChanges()
' リストの作成
Dim dl As New DataTable("LIST")
dl.Columns.Add("Code", GetType(Int32))
dl.Columns.Add("Name", GetType(String))
dl.Rows.Add(0, "AAA")
dl.Rows.Add(1, "AAA")
dl.Rows.Add(2, "AAA")
dl.AcceptChanges()
' コンボの設定
C1TrueDBDropdown1.DataSource = dl
C1TrueDBDropdown1.DisplayMember = "Name"
C1TrueDBDropdown1.ValueMember = "Code"
C1TrueDBDropdown1.ValueTranslate = True
C1TrueDBDropdown1.Width = 100
For i As Integer = 0 To C1TrueDBDropdown1.Columns.Count - 1
C1TrueDBDropdown1.DisplayColumns(i).HeadingStyle.HorizontalAlignment = AlignHorzEnum.Center
C1TrueDBDropdown1.DisplayColumns(i).Style.HorizontalAlignment = AlignHorzEnum.Center
C1TrueDBDropdown1.DisplayColumns(i).Width = 50
Next
' グリッドの設定
C1TrueDBGrid1.DataSource = dt
C1TrueDBGrid1.Columns(0).DropDown = C1TrueDBDropdown1
◎サンプルコード(C#)Dim dt As New DataTable("DATA")
dt.Columns.Add("ColumnA", GetType(Int32))
For i As Integer = 0 To 10
dt.Rows.Add(i Mod 3)
Next
dt.AcceptChanges()
' リストの作成
Dim dl As New DataTable("LIST")
dl.Columns.Add("Code", GetType(Int32))
dl.Columns.Add("Name", GetType(String))
dl.Rows.Add(0, "AAA")
dl.Rows.Add(1, "AAA")
dl.Rows.Add(2, "AAA")
dl.AcceptChanges()
' コンボの設定
C1TrueDBDropdown1.DataSource = dl
C1TrueDBDropdown1.DisplayMember = "Name"
C1TrueDBDropdown1.ValueMember = "Code"
C1TrueDBDropdown1.ValueTranslate = True
C1TrueDBDropdown1.Width = 100
For i As Integer = 0 To C1TrueDBDropdown1.Columns.Count - 1
C1TrueDBDropdown1.DisplayColumns(i).HeadingStyle.HorizontalAlignment = AlignHorzEnum.Center
C1TrueDBDropdown1.DisplayColumns(i).Style.HorizontalAlignment = AlignHorzEnum.Center
C1TrueDBDropdown1.DisplayColumns(i).Width = 50
Next
' グリッドの設定
C1TrueDBGrid1.DataSource = dt
C1TrueDBGrid1.Columns(0).DropDown = C1TrueDBDropdown1
// データの作成
DataTable dt = new DataTable("DATA");
dt.Columns.Add("ColumnA", typeof(Int32));
for (int i = 0; i <= 10; i++) {
dt.Rows.Add(i % 3);
}
dt.AcceptChanges();
// リストの作成
DataTable dl = new DataTable("LIST");
dl.Columns.Add("Code", typeof(Int32));
dl.Columns.Add("Name", typeof(string));
dl.Rows.Add(0, "AAA");
dl.Rows.Add(1, "AAA");
dl.Rows.Add(2, "AAA");
dl.AcceptChanges();
// コンボの設定
C1TrueDBDropdown1.DataSource = dl;
C1TrueDBDropdown1.DisplayMember = "Name";
C1TrueDBDropdown1.ValueMember = "Code";
C1TrueDBDropdown1.ValueTranslate = true;
C1TrueDBDropdown1.Width = 100;
for (int i = 0; i <= C1TrueDBDropdown1.Columns.Count - 1; i++) {
C1TrueDBDropdown1.DisplayColumns(i).HeadingStyle.HorizontalAlignment = AlignHorzEnum.Center;
C1TrueDBDropdown1.DisplayColumns(i).Style.HorizontalAlignment = AlignHorzEnum.Center;
C1TrueDBDropdown1.DisplayColumns(i).Width = 50;
}
// グリッドの設定
C1TrueDBGrid1.DataSource = dt;
C1TrueDBGrid1.Columns(0).DropDown = C1TrueDBDropdown1;
DataTable dt = new DataTable("DATA");
dt.Columns.Add("ColumnA", typeof(Int32));
for (int i = 0; i <= 10; i++) {
dt.Rows.Add(i % 3);
}
dt.AcceptChanges();
// リストの作成
DataTable dl = new DataTable("LIST");
dl.Columns.Add("Code", typeof(Int32));
dl.Columns.Add("Name", typeof(string));
dl.Rows.Add(0, "AAA");
dl.Rows.Add(1, "AAA");
dl.Rows.Add(2, "AAA");
dl.AcceptChanges();
// コンボの設定
C1TrueDBDropdown1.DataSource = dl;
C1TrueDBDropdown1.DisplayMember = "Name";
C1TrueDBDropdown1.ValueMember = "Code";
C1TrueDBDropdown1.ValueTranslate = true;
C1TrueDBDropdown1.Width = 100;
for (int i = 0; i <= C1TrueDBDropdown1.Columns.Count - 1; i++) {
C1TrueDBDropdown1.DisplayColumns(i).HeadingStyle.HorizontalAlignment = AlignHorzEnum.Center;
C1TrueDBDropdown1.DisplayColumns(i).Style.HorizontalAlignment = AlignHorzEnum.Center;
C1TrueDBDropdown1.DisplayColumns(i).Width = 50;
}
// グリッドの設定
C1TrueDBGrid1.DataSource = dt;
C1TrueDBGrid1.Columns(0).DropDown = C1TrueDBDropdown1;
【再現手順】
1.サンプルを実行します
2.ColumnAのセルを選択します
3.プルダウン(▼)をクリックします
4.プルダウンに表示される一番下の項目("AAA")を選択します
5.再度プルダウン(▼)をクリックします
結果:一番初めの項目("AAA")が選択されてます(事象1)
6.続けてリストが表示された状態でColumnAの他のセルをクリックします
結果:「入力文字列の形式が正しくありません」というメッセージが表示されます(事象2)
回避方法
この問題はバージョン2.0.20152.74または4.0.20152.74で修正されました。
修正版の適用方法については、アップデートの方法を参照してください。
修正版を適用しない場合の回避方法は次の通りです
下記コードのようにComboSelectイベントにてUpdateDataメソッドを使用してグリッドを更新します。
◎サンプルコード(VB)
◎サンプルコード(C#)
修正版の適用方法については、アップデートの方法を参照してください。
修正版を適用しない場合の回避方法は次の通りです
下記コードのようにComboSelectイベントにてUpdateDataメソッドを使用してグリッドを更新します。
◎サンプルコード(VB)
Private Sub C1TrueDBGrid1_ComboSelect(sender As Object, e As ColEventArgs) Handles C1TrueDBGrid1.ComboSelect
C1TrueDBGrid1.UpdateData()
End Sub
C1TrueDBGrid1.UpdateData()
End Sub
◎サンプルコード(C#)
private void C1TrueDBGrid1_ComboSelect(object sender, ColEventArgs e) {
C1TrueDBGrid1.UpdateData();
}
C1TrueDBGrid1.UpdateData();
}
旧文書番号
81255