作成日: 2021/07/06 最終更新日: 2021/07/28
文書種別
不具合
状況
修正済み
詳細
データ連結したGcComboBoxCellのDropDown.Widthを設定している場合、非連結GcComboBoxCellのドロップダウン展開後にデータ連結したドロップダウンを展開すると例外が発生します。
回避方法
この問題はService Pack 6(v10.0.4006.2012)で修正されました。
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
Service Pack 6 未適用のときは以下の回避方法をご検討ください。
コンボボックスのドロップダウンを開いたときにイベントハンドラを追加し、その中で幅を変更して回避が可能です。
〇サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' コンボボックス型セル用データの作成
Dim dt As New DataTable()
dt.Columns.AddRange({New DataColumn("ColA"), New DataColumn("ColB")})
For i = 0 To 4
dt.Rows.Add($"A{i}", $"B{i}") Next dt.AcceptChanges()
' セル型の作成 Dim comboCell1 As New GcComboBoxCell() comboCell1.Items.Add("A") comboCell1.Items.Add("B")
Dim comboCell2 As New GcComboBoxCell() 'comboCell2.DropDown.Width = 100 ' <== この設定があると、comboCell1のリストを開いた後にcomboCell2のリストを開くと例外が発生する comboCell2.DataSource = dt
' テンプレートの作成 Dim template1 As Template = Template.CreateGridTemplate(New Cell() {comboCell1, comboCell2}) ' MultiRowの設定 GcMultiRow1.Template = template1 GcMultiRow1.RowCount = 5 End Sub Private Sub GcMultiRow1_EditingControlShowing(sender As Object, e As EditingControlShowingEventArgs) Handles GcMultiRow1.EditingControlShowing Dim GcMultiRow As GcMultiRow = sender Dim Control As GcComboBoxEditingControl = e.Control If Control IsNot Nothing Then RemoveHandler Control.DropDownOpened, AddressOf DropDownOpenedHandler If GcMultiRow.CurrentCell.CellIndex = 1 Then AddHandler Control.DropDownOpened, AddressOf DropDownOpenedHandler End If End If End Sub
Private Sub DropDownOpenedHandler(sender As Object, e As EventArgs) Dim Control As GcComboBoxEditingControl = sender Control.DropDown.Width = 100 RemoveHandler Control.DropDownOpened, AddressOf DropDownOpenedHandler
End Sub
〇サンプルコード(C#)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
gcMultiRow1.EditingControlShowing += GcMultiRow1_EditingControlShowing;
}
private void Form1_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("ColA"), new DataColumn("ColB") });
for(var i = 0; i < 5; i++)
{
dt.Rows.Add($"A{i}", $"B{i}");
}
dt.AcceptChanges();
// セル型の作成
GcComboBoxCell comboCell1 = new GcComboBoxCell();
comboCell1.Items.Add("A");
comboCell1.Items.Add("B");
GcComboBoxCell comboCell2 = new GcComboBoxCell();
//comboCell2.DropDown.Width = 100; // <== この設定があると、comboCell1のリストを開いた後にcomboCell2のリストを開くと例外が発生する
comboCell2.DataSource = dt;
Template template1 = Template.CreateGridTemplate(new Cell[] { comboCell1, comboCell2});
// MultiRowの設定
gcMultiRow1.Template = template1;
gcMultiRow1.RowCount = 5;
}
private void GcMultiRow1_EditingControlShowing(object sender, EditingControlShowingEventArgs e)
{
GcMultiRow GcMultiRow = (GcMultiRow)sender;
GcComboBoxEditingControl Control = (GcComboBoxEditingControl)e.Control;
if(Control != null)
{
Control.DropDownOpened -= new EventHandler(DropDownOpenedHandler);
if (gcMultiRow1.CurrentCell.CellIndex==1)
{
Control.DropDownOpened += new EventHandler(DropDownOpenedHandler);
}
}
}
private void DropDownOpenedHandler(object sender, EventArgs e)
{
GcComboBoxEditingControl Control = (GcComboBoxEditingControl)sender;
Control.DropDown.Width = 100;
Control.DropDownOpened -= new EventHandler(DropDownOpenedHandler);
}
}