Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/10/2010, 09:43
JosueMariaca
 
Fecha de Ingreso: octubre-2010
Mensajes: 18
Antigüedad: 14 años, 4 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