C sharp - Problema con un Combobox dentro de un dataGridView.

 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado su posición en 64 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Problema con un Combobox dentro de un dataGridView.

Publicado por Esteban (2 intervenciones) el 22/10/2018 17:53:04
¡¡¡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:

1
2
3
4
5
6
7
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>:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public List<TransferAction> GenerateModel(List<Q43Base> input)
{
    Catalog catalog = Globals.GetCatalog();
    catalog.Customers.Download(Program.ServiceSecurityKey);
    List<CustomerItem> customerChildren = catalog.Customers.GetChildren();
 
    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:

1
2
3
4
5
6
7
8
9
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.

Adjunto archivo con el problema, para mayor comprensión.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema con un Combobox dentro de un dataGridView.

Publicado por William Brito (2 intervenciones) el 23/10/2018 21:30:19
Usando un DataGridTemplateColumn. El Template consiste en unicamente el combobox con las propiedades ItemsSource and SelectedItem convenientemente enlazadas y listo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con un Combobox dentro de un dataGridView.

Publicado por Esteban (2 intervenciones) el 24/10/2018 08:56:31
Muchas gracias, pero ¿cómo implemento yo esto en mi datagridview?..... Es que he visto algo como esto por internet:

1
2
3
4
5
6
7
8
9
10
11
12
13
var col = new DataGridTemplateColumn();
col.Header = "Code col";
var template = new DataTemplate();
var textBlockFactory = new FrameworkElementFactory(typeof(TextBlock));
textBlockFactory.SetBinding(TextBlock.TextProperty,new Binding());
template.VisualTree = textBlockFactory;
 
col.CellTemplate = template;
template = new DataTemplate();
var comboBoxFactory = new FrameworkElementFactory(typeof(ComboBox));
template.VisualTree = comboBoxFactory;
col.CellEditingTemplate = template;
dataGrid1.Columns.Add(col);


Pero yo no tengo esa clase en mi VS, y eso que tengo la versión de 2017.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar