Campo variable de una columna de un datagrid
Necesito saber si puede hacerse lo siguiente con visualbasic.net. Quiero que en una columna de un datagrid (o de cualquier otro control, indico este porque de momento es el único que conozco) unas filas tengan un campo editable y otras no seria algo asi:
producto stock cantidad pedida
para unos determinados productos las cantidades pedidas son fijas y no las puede modificar y para otros productos el usuario debe indicar la cantidad que quiere pedir, siempre y cuando no sea mayor que el stock.......
...estoy perdidisima porque soy novata en asp.net aunque asp me da bastante bien.. MUCHAS GRACIAS
producto stock cantidad pedida
para unos determinados productos las cantidades pedidas son fijas y no las puede modificar y para otros productos el usuario debe indicar la cantidad que quiere pedir, siempre y cuando no sea mayor que el stock.......
...estoy perdidisima porque soy novata en asp.net aunque asp me da bastante bien.. MUCHAS GRACIAS
El problema es que quiero establecerlo para unas filas si y para otras no, no para toda la columna, puedo hacerlo???
A ver, yo lo haria de la siguiente manera, Pongamos q el datagrid usa de templates para hacer el cambio de estado entre no editable i editado, entonces tendrias definida una itemTemplate i una editItemTemplate para cada columna de tu datagrid, algo asi;
<asp:TemplateColumn HeaderText="Nombre">
<ItemTemplate>
<asp:Label id=lblNombre runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "strNombre") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id=txtNombre CssClass="form" Text='<%# DataBinder.Eval(Container.DataItem, "strNombre") %>' MaxLength="50" Runat="server">
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
con esto al hacer una fila editable me cambiaria una label por un textbx, donde podria cambiar el valor del mismo.
Ahora si suponemos q dependiendo de un valor de la BD queremos q sea editable el textbox o no podemos resolverlo asi:
<EditItemTemplate>
<asp:TextBox id=txtNombre CssClass="form" Text='<%# DataBinder.Eval(Container.DataItem, "strNombre") %>' MaxLength="50" Runat="server" ReadOnly='<%# myFuncion(DataBinder.Eval(Container.DataItem, "valorAComprobar")) %>'>
</asp:TextBox>
</EditItemTemplate>
ahora el valor de la propiedad readonly del textbox dependera de lo q devuelva myFuncion.
public string myFuncion(object valor)
{
//si valor me dice q lo deje editar
return "false";
//si valor me dice q no es editable
return "true";
}
fijate q la funcion debe ser publica, pues sino no podrias acceder a ella desde el lado html, ha de devolver una string, pues las etiquetas # serian algo parecido a las = en asp, y el parametro es un object, ya q no se q es lo q estoy recibiendo. En la funcion tu serias la encargada de decidir el tipo de ese valor i las condiciones para q devuelva true o false.
Yo lo haria de este modo. se te seguiria viendo un textbox, pero no dejaria editarlo.
Espero haberte ayudado.
Elph
<asp:TemplateColumn HeaderText="Nombre">
<ItemTemplate>
<asp:Label id=lblNombre runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "strNombre") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id=txtNombre CssClass="form" Text='<%# DataBinder.Eval(Container.DataItem, "strNombre") %>' MaxLength="50" Runat="server">
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
con esto al hacer una fila editable me cambiaria una label por un textbx, donde podria cambiar el valor del mismo.
Ahora si suponemos q dependiendo de un valor de la BD queremos q sea editable el textbox o no podemos resolverlo asi:
<EditItemTemplate>
<asp:TextBox id=txtNombre CssClass="form" Text='<%# DataBinder.Eval(Container.DataItem, "strNombre") %>' MaxLength="50" Runat="server" ReadOnly='<%# myFuncion(DataBinder.Eval(Container.DataItem, "valorAComprobar")) %>'>
</asp:TextBox>
</EditItemTemplate>
ahora el valor de la propiedad readonly del textbox dependera de lo q devuelva myFuncion.
public string myFuncion(object valor)
{
//si valor me dice q lo deje editar
return "false";
//si valor me dice q no es editable
return "true";
}
fijate q la funcion debe ser publica, pues sino no podrias acceder a ella desde el lado html, ha de devolver una string, pues las etiquetas # serian algo parecido a las = en asp, y el parametro es un object, ya q no se q es lo q estoy recibiendo. En la funcion tu serias la encargada de decidir el tipo de ese valor i las condiciones para q devuelva true o false.
Yo lo haria de este modo. se te seguiria viendo un textbox, pero no dejaria editarlo.
Espero haberte ayudado.
Elph