none
Problema incluyendo un Combobox en un DataGridView. RRS feed

  • Pregunta

  • ¡¡¡Buenas!!!.

    Tengo un datagridview en mi proyecto,y he incluído dentro de este un Combobox. La situación es que tengo un fichero secuencial de entrada, con información relativa a clientes, y deseo extraer información del mismo, tal como el nombre, el código de operación, la cuenta y el importe. Pero claro, un cliente puede tener una o más cuentas a su nombre, por lo que necesito un Combobox para mi DataGridView.

    Para eso he creado una clase dentro de mi clase:

                public class TransferAction

                {
                    public string CustomeName { get; set; }
                    public string CustomeOp { get; set; }
                    public DataGridViewComboBoxColumn CustomeAccount { get; set; }
                    public decimal CustomeAmount { get; set; }
                }

    Y en el proceso relleno mi variable ComboAccount con los datos de AccountCmr la cual está definida como List<string>:

                                                

    public List<TransferAction> GenerateModel(List<Q43Base> input)
            {
    Catalog catalog = Globals.GetCatalog();                
                    catalog.Customers.Download(Program.ServiceSecurityKey); // "", -1, ItemContentMode.Complete, null, false, -1, 0, false, true);
                    List<CustomerItem> customerChildren = catalog.Customers.GetChildren(); //<CustomerItem>(null, ItemContentMode.Complete);

                    List<TransferAction> actios = new List<TransferAction>();
                    foreach (var register in input)
                    {
                        if (register.Id == Q43Movement.ID)
                        {
                            if (CustomeData == true)
                            {
        DataGridViewComboBoxColumn ComboAccount = new DataGridViewComboBoxColumn();
                                this.GenerateCustomer();
                                AccountCmr = catalog.Customers.FCustomer(customerChildren, ChainCustomer, Program.ServiceSecurityKey);
                                foreach(string acc in AccountCmr)
                                {
                                    ComboAccount.Items.Add(acc);
                                }

                                actios.Add(new TransferAction() { CustomeName = this.ChainCustomer, CustomeOp = this.ChainOperation, CustomeAccount = ComboAccount, CustomeAmount = this.Amount });
    .............

    Y cuando pulso el botón para rellenar todo el DataGridView:

            private void ButtonGenerateActions_Click(object sender, EventArgs e)

            {
                if (inputModelQ43.Count > 0)
                {
                    CustomerTransfersManagement ctm = new CustomerTransfersManagement();
                    List<TransferAction> mimodeloTransformado = ctm.GenerateModel(inputModelQ43);
                    dataGridView1.DataSource = mimodeloTransformado;
                }
            }

    Los datos de mi datagridview son estáticos. Su contenido es el siguiente:

         

    Header text DataPropertyName ColumnType Width MaxDropDownItems
    Customer Name CustomeName DataGridViewTextBoxColumn 275
    Customer Op. CustomeOp DataGridViewTextBoxColumn 105
    Customer Account CustomeAccount DataGridViewComboBoxColumn 220 15
    Customer Amount CustomeAmount DataGridViewTextBoxColumn 100

    Por tanto, cuando ejecuto mi programa, por cada línea de mi dataGridView y, cuando las cuentas a la información relativa de cada cliente se van a informar, Visual Studio da un error:

    La siguiente excepción ocurrió en dataGridView: System.ArgumentException. El valor del datagridview no es válido. Para reemplazar este cuadro de diálogo predeterminado controle el evento dataerror.

    ¿¿¿Porqué???, ¿¿¿qué debo de cambiar para que el programa funcione y la columna del Combobox pueda ser informada con las cuentas de los clientes???.... Porque yo puedo controlar el evento dataerror y este desaparece, pero no es lo mismo, la columna del combobox está vacia, por lo que no está bien hecho.

    Muchas gracias.


    Para reemplazar este cuadro de diálogo predeterminado
    Para reemplazar este cuadro de diálogo predeterminado
    Para reemplazar este cuadro de diálogo predeterminado
    lunes, 22 de octubre de 2018 15:23