Principales respuestas
Es posible utilizar un ComboBox en un DataGridView con 2 DataSources distintos??

Pregunta
-
Verán, este es el tema... tengo un DataGridView con varias columnas, entre ellas 2 ComboBox, el primero de ellos determina la forma de pago (Por ejemplo 1,2 o 3), dependiendo de esta forma de pago seleccionada, la siguiente ComboBox Column, y he aqui el problema que tengo, debería de cargarse con los items de determinado DataSource (Para 1 seria DataSource1, para el 2 el DS 2, y asi...). Es posible realizarlo de este modo?? Hasta ahora logro no logro aplicar esa dualidad o variabilidad de los DataSources para el mismo ComboBox en distintas filas del DataGridView, he intentado limpiando colocandole NOTHING al DataSource, asi como eliminando los Items del ComboBox antes de asignarle el nuevo DataSource, pero nada, simplemente me arroja un error interno que dice algo asi como: "El Valor de DataGridViewComboBoxCell no es valido".
Si me pueden ayudar les estaría muy agradecido.
Saludos desde Caracas Venezuela.
Respuestas
-
Entiendo que estamos hablando de Windows Forms y VB.NET
Private Sub DataGridView1_CellValidated(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValidated Dim grid As DataGridView = sender If grid.Columns(e.ColumnIndex).Name = "Combo1" Then Dim cell2 As DataGridViewComboBoxCell = grid.Rows(e.RowIndex).Cells("Combo2") cell2.Value = Nothing Select Case CType(grid.Rows(e.RowIndex).Cells(e.ColumnIndex).Value, String) Case "1" cell2.DataSource = ds1 Case "2" cell2.DataSource = ds2 Case "3" cell2.DataSource = ds3 Case Else cell2.DataSource = Nothing End Select End If End Sub
- Propuesto como respuesta Karen MalagónModerator miércoles, 22 de abril de 2015 21:12
- Marcado como respuesta Karen MalagónModerator viernes, 24 de abril de 2015 22:15
Todas las respuestas
-
Hola, te paso un ejemplo que acabo de hacer, espero te sirva.
En este caso, tengo un Gridview con cinco filas, en cada fila hay dos dropdownlist, al seleccionar el valor del primero, automaticamente cambia los valores del segundo.
<head runat="server"> <title>Página sin título</title> <script runat="server"> Protected Sub On_Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then Dim FilasGridView() As String = {"uno", "dos", "tres", "cutro", "cinco"} GridView1.DataSource = FilasGridView GridView1.DataBind() End If End Sub Private Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound Dim Datos() As String = {"Numeros", "Letras", "Ordinales"} If e.Row.RowType = DataControlRowType.DataRow Then Dim list As DropDownList = CType(e.Row.FindControl("DropDownList1"), DropDownList) AddHandler list.SelectedIndexChanged, AddressOf List_SelectedIndexChanged list.DataSource = Datos list.DataBind() list.SelectedIndex = 0 Dim list2 As DropDownList = CType(e.Row.FindControl("DropDownList2"), DropDownList) SetDatasource(0, list2) End If End Sub Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated If e.Row.RowType = DataControlRowType.DataRow Then Dim list As DropDownList = CType(e.Row.FindControl("DropDownList1"), DropDownList) AddHandler list.SelectedIndexChanged, AddressOf List_SelectedIndexChanged End If End Sub Private Sub SetDatasource(ByVal Index As Integer, ByVal List As DropDownList) Dim ds1() As String = {"Uno", "Dos", "Tres", "Cuatro", "Cinco", "Seis"} Dim ds2() As String = {"A", "B", "C", "D", "E"} Dim ds3() As String = {"Primero", "Segundo", "Tercero", "Cuarto"} Dim DS()() As String = {ds1, ds2, ds3} List.DataSource = DS(Index) List.DataBind() End Sub Private Sub List_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Dim list As DropDownList = CType(sender.parent.parent.FindControl("DropDownList2"), DropDownList) SetDatasource(CType(sender, DropDownList).SelectedIndex, list) End Sub </script> </head> <body> <form id="form1" runat="server" onclick="return form1_onclick()"> <asp:GridView runat="server" ID="GridView1" AutoGenerateColumns="false"> <Columns> <asp:TemplateField > <ItemTemplate> Origen:<asp:DropDownList ID="DropDownList1" AutoPostBack="true" runat="server"> </asp:DropDownList></ItemTemplate> </asp:TemplateField> <asp:TemplateField> <ItemTemplate> Datos:<asp:DropDownList ID="DropDownList2" runat="server" > </asp:DropDownList></ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </form> </body>
Espero te sirva, saludos.
- Propuesto como respuesta Karen MalagónModerator miércoles, 22 de abril de 2015 21:12
-
Entiendo que estamos hablando de Windows Forms y VB.NET
Private Sub DataGridView1_CellValidated(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValidated Dim grid As DataGridView = sender If grid.Columns(e.ColumnIndex).Name = "Combo1" Then Dim cell2 As DataGridViewComboBoxCell = grid.Rows(e.RowIndex).Cells("Combo2") cell2.Value = Nothing Select Case CType(grid.Rows(e.RowIndex).Cells(e.ColumnIndex).Value, String) Case "1" cell2.DataSource = ds1 Case "2" cell2.DataSource = ds2 Case "3" cell2.DataSource = ds3 Case Else cell2.DataSource = Nothing End Select End If End Sub
- Propuesto como respuesta Karen MalagónModerator miércoles, 22 de abril de 2015 21:12
- Marcado como respuesta Karen MalagónModerator viernes, 24 de abril de 2015 22:15