Pergunta

Eu tenho um aplicativo winform que preenche um monte de seus campos dropdomn Fram uma tabela de manutenção em tempo de execução. Cada formulário tem uma Private void FillMaintFields() Eu ter executado em um erro estranho onde definindo a visibilidade coluna em 1 obras de formulário mas em outra me dá uma índice fora da faixa erro!

Aqui está o método abriged no ofender form ->

 private void FillMaintFields()
{
    var myMCPTableMaint = new TableMaint();
    // Index 27 is Diabetic Teaching Topics
    var myDataSet = myMCPTableMaint.GetMaintItem(27);
    var myDataTable = myDataSet.Tables[0];
    // Diabetic TeachingTopics dropdown
    chkcboDiabeticTeachingTopics.Properties.DataSource = myDataTable;
    chkcboDiabeticTeachingTopics.Properties.DisplayMember = "ItemDescription";
    chkcboDiabeticTeachingTopics.Properties.ValueMember = "ItemID";
    // Index 26 is Diabetic Teaching
    myDataSet = myMCPTableMaint.GetMaintItem(26);
    myDataTable = myDataSet.Tables[0];
    lkuDiabeticTeaching.Properties.DataSource = myDataTable;
    lkuDiabeticTeaching.Properties.PopulateColumns();
    lkuDiabeticTeaching.Properties.DisplayMember = "ItemDescription";
    lkuDiabeticTeaching.Properties.ValueMember = "ItemID";
    lkuDiabeticTeaching.Properties.Columns[0].Visible = false;
    lkuDiabeticTeaching.Properties.Columns[1].Visible = false;
    lkuDiabeticTeaching.Properties.Columns[3].Visible = false;
    lkuDiabeticTeaching.Properties.Columns[4].Visible = false;
}

Agora, aqui é a função trabalhando em uma forma irmã ->

        private void FillMaintFields()
    {
        var myMCPTableMaint = new TableMaint();
        // Index 4 is Minimum Contact Schedule
        var myDataSet = myMCPTableMaint.GetMaintItem(4);
        var myDataTable = myDataSet.Tables[0];
        lkuMinContactSchedule.Properties.DataSource = myDataTable;
        lkuMinContactSchedule.Properties.PopulateColumns();
        lkuMinContactSchedule.Properties.DisplayMember = "ItemDescription";
        lkuMinContactSchedule.Properties.ValueMember = "ItemID";
        lkuMinContactSchedule.Properties.Columns[0].Visible = false;
        lkuMinContactSchedule.Properties.Columns[1].Visible = false;
        lkuMinContactSchedule.Properties.Columns[3].Visible = false;
        lkuMinContactSchedule.Properties.Columns[4].Visible = false;

        // Index 5 is Release of Information Updated Annually
        myDataSet = myMCPTableMaint.GetMaintItem(5);
        myDataTable = myDataSet.Tables[0];
        lkuReleaseInfoUpdateAnnually.Properties.DataSource = myDataTable;
        lkuReleaseInfoUpdateAnnually.Properties.PopulateColumns();
        lkuReleaseInfoUpdateAnnually.Properties.DisplayMember = "ItemDescription";
        lkuReleaseInfoUpdateAnnually.Properties.ValueMember = "ItemID";
        lkuReleaseInfoUpdateAnnually.Properties.Columns[0].Visible = false;
        lkuReleaseInfoUpdateAnnually.Properties.Columns[1].Visible = false;
        lkuReleaseInfoUpdateAnnually.Properties.Columns[3].Visible = false;
        lkuReleaseInfoUpdateAnnually.Properties.Columns[4].Visible = false;}

Eles estão todos usando o mesmo método na DAL e acessar o EXACT mesma mesa que tem uma estrutura de ->


| ItemID | CategoryID | ItemDescription | OrderID | Ativo |

Eu estou em uma perda aqui a respeito de porque ele iria trabalhar em um local e não outro. Se eu comentar as colunas [] parte no Formulário de ofender ele retorna os dados corretos com erros não, mas, de colunas curso TODAS visível.

Ideias? Obrigado!

EDIT 1

Com base em alguns comentários e preocupações: O erro aparece na primeira linha que tenta acessar o Colunas []. Onde quer eo que quer coluna que pode estar no formulário de ofensa. Se eu depurar e olhada myDataTable ele mostra os columnms corretas e de dados correto.

Foi útil?

Solução 5

Bem, eu percebi isso. Meio. Por alguma razão eu preciso chamar lkuDiabeticTeaching.Properties.ForceInitialize(); depois de definir a fonte de dados no formulário de ofensa.

Eu só pode acho que porque eu tenho formulários aninhados que de alguma forma isso foi tentando o fogo antes que o controle foi inicializado.

Agora parece que este ->

            // Index 26 is Diabetic Teaching
        harDataSet = myHARTableMaint.GetMaintItem(26);
        harDataTable = harDataSet.Tables[0];
        lkuDiabeticTeaching.Properties.DataSource = harDataTable;
        lkuDiabeticTeaching.Properties.ForceInitialize();
        lkuDiabeticTeaching.Properties.PopulateColumns();
        lkuDiabeticTeaching.Properties.DisplayMember = "ItemDescription";
        lkuDiabeticTeaching.Properties.ValueMember = "ItemID";
        if(lkuDiabeticTeaching.Properties.Columns.Count > 0)
        {
            lkuDiabeticTeaching.Properties.Columns[0].Visible = false;
            lkuDiabeticTeaching.Properties.Columns[1].Visible = false;
            lkuDiabeticTeaching.Properties.Columns[3].Visible = false;
            lkuDiabeticTeaching.Properties.Columns[4].Visible = false; 
        }

Obrigado a todos que deram de lá tempo.

Outras dicas

é o erro acontece no "lkuReleaseInfoUpdateAnnually" ou a "lkuMinContactSchedule"? Que o controle é isso exatamente? Parece que o erro está no lado do controle das coisas, parece que o seu controle no segundo formulário não tem todas as colunas que você está esperando para ter.

EDIT: Você parece estar confundindo as colunas na dataTable com as colunas no seu controle (s). Eu não tenho certeza que o controle que você está usando, mas fazendo:

lkuReleaseInfoUpdateAnnually.Properties.Columns[0]

não significa que você está indexação para o DataTable. Você está indexação nas colunas de seu controle, que podem ou não podem estar lá.

Criar um código mínimo que ainda reproduz um problema. Depurar esse código; ou, se isso não ajuda, postá-lo aqui. O código acima não realmente dizer-nos alguma coisa: é demasiado grande, demasiado específicas para o seu problema. Nós não sabemos como seus dados olhares, nós temos que aceitar sua palavra a estrutura da tabela -. Embora C # parece discordar

Ao todo, qualquer ajuda ninguém pode oferecer é adivinhação apenas difusa.

Eu tenho algumas idéias sobre como especificar melhor bugs e sua origem. Algo que você deve fazer, é para assistir valor "lkuDiabeticTeaching.Properties.Columns.Count", se, é menor do que 1 significa, você não tem nenhuma coluna, e provavelmente porque nenhuma população ocorreu.

A única coisa que eu posso ver é que o primeiro conjunto de código está faltando uma chamada para PopulateForms () (que está incluído no segundo set). Que poderia ser isso?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top