Foros del Web » Programación para mayores de 30 ;) » .NET »

DataGridView con TextBoxColumn y ComboBoxColumn

Estas en el tema de DataGridView con TextBoxColumn y ComboBoxColumn en el foro de .NET en Foros del Web. Buenas Mi Foristas... La duda que me surgue es la siguiente.... Tengo un DataGridView que cargo cierta información de unos examenes de Laboratorios, pero resulta ...
  #1 (permalink)  
Antiguo 28/10/2010, 06:45
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 2 meses
Puntos: 0
DataGridView con TextBoxColumn y ComboBoxColumn

Buenas Mi Foristas...

La duda que me surgue es la siguiente....

Tengo un DataGridView que cargo cierta información de unos examenes de Laboratorios, pero resulta que algunos examenes. Yo cargo en un DataGridView mis examenes colocando lo siguiente :

Codigo Nombre Resultado
LAB51 Calcio
LAB43 XXXX
LAB56 YYYY

Deje la columna de resultados vacias para que sea el usuario quien cargue dicha información... Pero resulta que para algunos examenes yo puedo tener una serie de posibles resultados, por ejemplo calcio puede ser positivo/negativo .... Pero por ejemplo XXXX solo se escribe un valor especifico 10 o 20 o 30 !¡!¡!

Mi idea es tratar de cambiar la celda de resultado de cada examen a un textbox o combobox cuando sea necesario... De manera que si el examen tiene posibles resultados se me cargue el combobox y dicho combobox me muestre los posibles resultados de ese examen... De no tener posibles resultados que sencillamente me cargue solo el textbox !¡!¡

La cuestion es saber si yo puedo cambiar el tipo de columna por cada celda ¡!!¡
Algo parecido al panel de propiedades de nuestro visual studio... Donde por visible es un combobox que carga true o false ... Y donde name es un simple textbox donde escribir ... Todo esto dentro de un DataGridView (a menos que no sea un DataGridView no estoy segura)

Espero hayan logrado entender mi duda y me puedan asesorar... Seria genial ...

Saludos y Éxitos
__________________
Fiorellita
  #2 (permalink)  
Antiguo 28/10/2010, 09:43
 
Fecha de Ingreso: octubre-2010
Mensajes: 18
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: DataGridView con TextBoxColumn y ComboBoxColumn

Hola Fiorellita ... claro que se puede.

1. El gridview lo debes manejar con itemtemplates y con con BoundFiles. No se si ya lo tengas asi.
2. Debes tener dentro del GridView y por cada fila una columna (oculta) que funcione como identificador que te diga si en esa fila el dato a manejar sera fijo (TextBox) o de seleccion (DropDown) por ejemplo dicha columna puede tener un 0 o 1 donde el 0 sea que es un resultado fijo y el 1 sea que es un resultado seleccionable. Ejemplo


Codigo | Nomb | Res | Identificador
LAB51 | Calcio | (Nada) | 1
LAB43 | XXXX | (Nada) | 0
LAB56 | YYYY | (Nada) | 1

3. La estructura de tu grid deberia estar formada como sigue.

<asp:GridView ID="NombreDelGrid" runat="server" AutoGenerateColumns="False" Width="100%">
<RowStyle BackColor="#FFFADD" />
<Columns>
<asp:TemplateField HeaderText="Codig" >
<ItemTemplate>
<asp:Label ID="lblCodigo" runat="server" Text='<%# Eval("NombreDeColumnaQueContieneElCodigo") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="alert" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="True" />
</asp:TemplateField>

<asp:TemplateField HeaderText="Nombre">
<ItemTemplate>
<asp:Label ID="LblNombre" runat="server" Text='<%# convert.tostring(Eval("ColumnaQueContieneNombre")) %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="alert" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="True" />
</asp:TemplateField>

<asp:TemplateField HeaderText="Resultado">
<ItemTemplate>
<asp:Label ID="lblResultado" runat="server" Text='<%# convert.tostring(Eval("ColumnaConResultado")) %>' Visible="false"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server" MaxLength="20" Visible="false"></asp:TextBox>
<asp:DropDownList ID="DropDownList1" runat="server" Visible="false">
<asp:ListItem>Positivo</asp:ListItem>
<asp:ListItem>Negativo</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
<HeaderStyle CssClass="alert" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="True" />
</asp:TemplateField>

<asp:TemplateField HeaderText="identificador" Visible="false">
<ItemTemplate>
<asp:Label ID="LblIdentificador" runat="server" Text='<%# convert.tostring(Eval("Identificador")) %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="alert" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="True" />
</asp:TemplateField>


</Columns>
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
<HeaderStyle CssClass="alert" />
<AlternatingRowStyle BackColor="#EFEFEF" />
</asp:GridView>

:: lo importante de esta estructura del gridview es que en la columna 3, la del resultado tenemos 3 controles, Un label (Para mostrar datos), un textbox (Para escribir) y un DropDown Para seleccionar. Todos estan en Visible false. Y ademas una columna con el dato indentificador que permanecera invisuble por que solo es para manejo tuyo :::

4. Aho sigue ña forma de mostrar uno u otro (Textbox o DropDown). El GridView tiene un evento llamado RowDataBound que lo encuentras en el boton de eventos de la ventana de propiedades del grid. Dando doble clic en el nos genera el codigo necesario. En este evento programaras como sigue.

Protected Sub NombreDelGrid_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GrdRegistrosTemp.RowDataBound

Dim Identificador As New Label
If e.Row.RowType = DataControlRowType.DataRow Then 'Aqui se le dice que el siguiente codigo solo lo haga en filas de datos (No en el Header)
Identificador = e.Row.Cells(3).Controls(1) 'Aqui le asigamos a la etiqueda identificador el valor que trae en ese control el gridview
If Identificador.Text.Trim = "0" Then 'Valor fijo. Aparece el TextBox
e.Row.Cells(2).Controls(2).Visible = True 'Le decimos que en la columna 2(Resultado) haga visible el textbox
ElseIf Identificador.Text.Trim = "1" Then
e.Row.Cells(2).Controls(3).Visible = True 'Le decimos que en la columna 2(Resultado) haga visible el DropDown
'aqui tambien podrias cargar los datos que se mostraran en el DropDown
End If
End If
End Sub

************************************************** *************
El RowDataBound es un proceso que se genera fila por fila del grid mientras este se va llenando, asi que en resumen cuando el gris se este llenando con tus datos por cada fila ira a verificar el valor del identificador y aparecera ya sea el textbox o el DropDown segun el caso.
************************************************** *************

================================================== =======
Espero te sirva. Cualquier cosa estoy a tus ordenes. Saludos !!!

Última edición por JosueMariaca; 28/10/2010 a las 10:01
  #3 (permalink)  
Antiguo 28/10/2010, 15:17
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: DataGridView con TextBoxColumn y ComboBoxColumn

Hola JosueMariaca ¡!¡!
Gracias por tu respuesta ... Disculpa la tardanza en responder pero no habia tenido tiempo de revisar !¡¡!

Técnicamente comprendo lo que quieres explicarme ... Sin embargo hay algunas cosillas que no las tengo claras ... Por ejemplo:

Cita:
Iniciado por JosueMariaca Ver Mensaje
1. El gridview lo debes manejar con itemtemplates y con con BoundFiles. No se si ya lo tengas asi.
No se donde ubicar estas propiedades .... Ni para que se implementan... Ahora mismo buscare su funcion !¡!¡

Cita:
Iniciado por JosueMariaca Ver Mensaje
3. La estructura de tu grid deberia estar formada como sigue.

<asp:GridView ID="NombreDelGrid" runat="server" AutoGenerateColumns="False" Width="100%">
<RowStyle BackColor="#FFFADD" />
<Columns>
<asp:TemplateField HeaderText="Codig" >
<ItemTemplate>
<asp:Label ID="lblCodigo" runat="server" Text='<%# Eval("NombreDeColumnaQueContieneElCodigo") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="alert" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="True" />
</asp:TemplateField>

<asp:TemplateField HeaderText="Nombre">
<ItemTemplate>
<asp:Label ID="LblNombre" runat="server" Text='<%# convert.tostring(Eval("ColumnaQueContieneNombre")) %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="alert" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="True" />
</asp:TemplateField>

<asp:TemplateField HeaderText="Resultado">
<ItemTemplate>
<asp:Label ID="lblResultado" runat="server" Text='<%# convert.tostring(Eval("ColumnaConResultado")) %>' Visible="false"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server" MaxLength="20" Visible="false"></asp:TextBox>
<asp:DropDownList ID="DropDownList1" runat="server" Visible="false">
<asp:ListItem>Positivo</asp:ListItem>
<asp:ListItem>Negativo</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
<HeaderStyle CssClass="alert" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="True" />
</asp:TemplateField>

<asp:TemplateField HeaderText="identificador" Visible="false">
<ItemTemplate>
<asp:Label ID="LblIdentificador" runat="server" Text='<%# convert.tostring(Eval("Identificador")) %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="alert" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="True" />
</asp:TemplateField>


</Columns>
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
<HeaderStyle CssClass="alert" />
<AlternatingRowStyle BackColor="#EFEFEF" />
</asp:GridView>
Aca si me dejas super desubicada !¡!¡ No se si postee en el grupo incorrecto... Pero eso no es Web Form ?¿ Yo estoy trabajando con Windows Form ... Especificamente Visual Studio 2010 ¡¡!¡


Cita:
Iniciado por JosueMariaca Ver Mensaje

El GridView tiene un evento llamado RowDataBound que lo encuentras en el boton de eventos de la ventana de propiedades del grid. Dando doble clic en el nos genera el codigo necesario.
Mi DataGridView no tienes ese evento !¡!¡ =(

Por favor guarda mi correo electrónico: [email protected] !¡!¡
Para conversar mejor... Y nuevamente muchas gracias por la atención prestada... y espero puedes hecharme una mano...

Saludos y Éxitos
__________________
Fiorellita
  #4 (permalink)  
Antiguo 28/10/2010, 16:45
 
Fecha de Ingreso: octubre-2010
Mensajes: 18
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: DataGridView con TextBoxColumn y ComboBoxColumn

Upppsss pues si creo que andaba confundido ... lo que yo te puse es de web forms jajajajaj .. me emocione bastante pero pues de cualquier manera deja me echo un clavado a los winforms ¡¡ debe ser algo muy similar .. ya tengo tu correo , platicamos pronto Saludos !!!

Última edición por JosueMariaca; 28/10/2010 a las 16:54
  #5 (permalink)  
Antiguo 31/10/2010, 17:08
Avatar de edbc92  
Fecha de Ingreso: octubre-2010
Ubicación: Lima - Los Olivos
Mensajes: 93
Antigüedad: 13 años, 6 meses
Puntos: 5
Respuesta: DataGridView con TextBoxColumn y ComboBoxColumn

jaja... No sé si te entendi bien, pero bueno. Hay 2 formas de hacerlo: una programación y la otra solo configurandolo en "propiedades".

Seleccionas tu griedview, y ubica donde dice "editar columnas", una vez entrado ahi te aparecera otra ventana donde abra 2 columnas, uno donde dice "colimnas seleccionadas" y otra "propiedades". Bueno en la columna "columnas seleccionadas", le das clic en agregar, y te volverá ha aparecer otra ventana, en "nombre:", editas el nombre de la columna con la que llamaras cuando uses algun código, y en "tipo:" (que creo que es lo que tu quieres) seleccionas que tipo de control quieres que sea toda esa columa. Ejem: "Tipo: DataGridViewComboBoxColumn". Y en "texto del encabezado" supongo que ya deduciras esa parte... En fin le das agregar y listo. Bueno si quieres mas detalles del gridview, solo me avisas ;)...

Etiquetas: datagridview
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:40.