1

2ページのXtraTabControlがあり、2ページ目にページの読み込みが機能しない場合、両方に1つのLookUpEditがあります。

void Frm1_Load(object sender, EventArgs e)
{
    lookUpEditA.Properties.DataSource = datasource. . . . .
    lookUpEditA.Properties.ValueMember = "ID";
    lookUpEditA.Properties.DisplayMember = "xxxx";
    lookUpEditA.Properties.PopulateColumns();
    lookUpEditA.Properties.Columns["ID"].Visible = false;

    lookUpEditB.Properties.DataSource = datasource. . . . .
    lookUpEditB.Properties.ValueMember = "ID";
    lookUpEditB.Properties.DisplayMember = "xxxx";
    lookUpEditB.Properties.PopulateColumns();
    lookUpEditB.Properties.Columns["ID"].Visible = false;
}
4

2 に答える 2

1

この問題は、2番目のLookUpEditで「ID」列の可視性を設定した場合にのみ確認できます。

この問題の理由は、LookUpEditは、ハンドルが作成されるまで、データソース表現を操作できない(列の入力を実行したり、列の可視性を操作したりするなど)ことができないためです。2番目のLookUpEditは、2番目のタブページが表示されている場合にのみハンドルを作成します。

この問題を回避するには、次のアプローチを使用できます。

if(!lookUpEditB.IsHandleCreated)
    lookUpEditB.HandleCreated += lookUpEditB_HandleCreated;
else InitLookUpEditDataSource();
//...
void lookUpEditB_HandleCreated(object sender, EventArgs e) {
    lookUpEditB.HandleCreated -= lookUpEditB_HandleCreated;
    InitLookUpEditDataSource();
}
void InitLookUpEditDataSource() {
    lookUpEditB.Properties.DataSource = this.categoriesBindingSource;
    lookUpEditB.Properties.DisplayMember = "CategoryName";
    lookUpEditB.Properties.ValueMember = "CategoryID";
    lookUpEditB.Properties.PopulateColumns();
    lookUpEditB.Properties.Columns["CategoryID"].Visible = false;
}
于 2013-01-18T08:52:40.027 に答える
0

@DmitryG が言ったように、lookUpEditB.Properties.PopulateColumns()コントロールの UI ハンドラーが作成されるまでステートメントを使用することはできません。

私の理解では、これらは 2 番目のタブ ページが表示されたときにのみ作成されます。条件ステートメントを作成してハンドラーなどを作成する場合を除いXtraTabControl.SelectedPageChanged Eventて、.lookUpEditBXtraTabControl.SelectedTabPage PropertylookUpEditB

以下のテスト済みのコード スニペットを確認してください。

public partial class TabControlTest : Form
{
    List<Category> dataSource = new List<Category>();
    public TabControlTest()
    {
        InitializeComponent();
        for (int i = 0; i < 10; i++)
        {
            dataSource.Add(new Category { ID = i + 1, Name = "Category" + (i + 1) });
        }
    }

    private void TabControlTest_Load(object sender, EventArgs e)
    {
        lookUpEditA.Properties.DataSource = dataSource;
        lookUpEditA.Properties.ValueMember = "ID";
        lookUpEditA.Properties.DisplayMember = "Name";
        lookUpEditA.Properties.PopulateColumns();
        lookUpEditA.Properties.Columns["ID"].Visible = false;
    }

    private void xtraTabControl1_SelectedPageChanged(object sender, DevExpress.XtraTab.TabPageChangedEventArgs e)
    {
        if (xtraTabControl1.SelectedTabPage == xtraTabPage2)
        {
             lookUpEditB.Properties.DataSource = dataSource;
            lookUpEditB.Properties.ValueMember = "ID";
            lookUpEditB.Properties.DisplayMember = "Name";
            lookUpEditB.Properties.PopulateColumns();
            lookUpEditB.Properties.Columns["ID"].Visible = false;
        }
    }
}

この助けを願っています。

于 2013-01-18T10:43:05.830 に答える