ASP.NET - No perder el Focus en un textBox dentro de dataGridWiew

 
Vista:
sin imagen de perfil
Val: 3
Ha aumentado 1 puesto en ASP.NET (en relación al último mes)
Gráfica de ASP.NET

No perder el Focus en un textBox dentro de dataGridWiew

Publicado por Fernando (2 intervenciones) el 19/06/2018 17:01:50
Buen día

Actualmente tengo un pequeño proyecto en el que de acuerdo a la información de una consulta se llena un DataGridView. Entre los campos que tengo existe un textBox que se repite en cada renglón. A dicho textBox le coloque un evento TextChange. El evento se activa bien y hace lo que yo requiero. Sin embargo como tiene la propiedad AutoPostBack en true, si estoy en una de las celdas de hasta abajo al activarse el evento, me regresa hasta arriba de la página. Y lo que quiero es evitar este cambió.

Aquí parte del código.

Este es el GridView en el aspx, el evento esta en el textBox de txt_PedidoTienda

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<asp:GridView ID="gridArticulos" ClientIDMode="Static" runat="server" AutoGenerateColumns="False" TabIndex="-1" Width="100%" ShowHeader="false">
	<Columns>
		<asp:BoundField HeaderText="Sugerido Mínimo (Cajas)"  ItemStyle-HorizontalAlign="Center" DataField ="sugeridoMin"
					ItemStyle-Width="7%" SortExpression="nombre" ReadOnly="true" ItemStyle-Font-Size="8pt"></asp:BoundField>
		<asp:BoundField HeaderText="Sugerido Máximo (Cajas)"  ItemStyle-HorizontalAlign="Center" DataField ="sugeridoMax"
					ItemStyle-Width="7%" SortExpression="nombre" ReadOnly="true" ItemStyle-Font-Size="8pt"></asp:BoundField>
		<asp:BoundField HeaderText="Sugerido Óptimo (Cajas)"  ItemStyle-HorizontalAlign="Center" DataField ="sugeridoOpt"
					ItemStyle-Width="7%" SortExpression="nombre" ReadOnly="true" ItemStyle-Font-Size="8pt"></asp:BoundField>
		<asp:TemplateField ItemStyle-Width="10%" HeaderText="&nbsp;&nbsp;Pedido (CAJAS)">
			<ItemTemplate>
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
				<asp:TextBox  ID="txt_pedidoTienda" ClientIDMode="Static" runat="server" AutoPostBack="true" maxlength="10"  Width="45%" Font-Size="10pt" style="resize:none;border:solid;border-width:thin;" OnTextChanged="txt_pedidoTienda_TextChanged" />
			</ItemTemplate>
		</asp:TemplateField>
		<asp:TemplateField ItemStyle-Width="23%" HeaderText="&nbsp;&nbsp;&nbsp;&nbsp;Observaciones" >
			<ItemTemplate >
				&nbsp;&nbsp;&nbsp;&nbsp;
				<asp:TextBox  ID="txt_observaciones" ClientIDMode="Static" runat="server" AutoPostBack="false" maxlength="200"  Width="85%" Font-Size="10pt" style="resize:none;border:solid;border-width:thin;" />
			</ItemTemplate>
		</asp:TemplateField>
	</Columns>
	<HeaderStyle BackColor="Red" Font-Size="8pt" ForeColor="White" HorizontalAlign="Center" />
	<FooterStyle BackColor="Red" Font-Size="8pt" ForeColor="White" HorizontalAlign="Center" />
	<PagerStyle BackColor="Red" Font-Size="10pt" ForeColor="White" HorizontalAlign="Center" />
	<AlternatingRowStyle BackColor="#EAEAEA" />
	<EmptyDataTemplate>
		NO HAY REGISTROS
	</EmptyDataTemplate>
	<SelectedRowStyle CssClass="selectedrow" />
</asp:GridView>

Este es el evento del OntextChanged en el cs, aquí no tengo problemas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
protected void txt_pedidoTienda_TextChanged(object sender, EventArgs e)
{
	bool validarCadena = false, validarEntero = false;
 
	((TextBox)(sender)).ForeColor = Color.Black;
	((TextBox)(sender)).BackColor = Color.White;
 
	// @Fernando -- Obtrengo el valor que está ingresando el usuario
	string cantidad = ((TextBox)(sender)).Text.Trim();
 
	GridViewRow currentRow = (GridViewRow)((TextBox)sender).Parent.Parent;
 
	#region Validar Campos TextBox
 
	if (cantidad.Trim() != "")
	{
		validarCadena = cls_ValidacionCampos.validarCampoNumero(cantidad);
 
		if (!validarCadena)
		{
			lbl_2textos_mensajeTitulo.Text = "ERROR EN EL CAMPO";
			lbl_2textos_mensajeDescripcion.Text = "Existen caracteres no validos en el valor ingresado.";
			((TextBox)(sender)).ForeColor = Color.Black;
			((TextBox)(sender)).BackColor = Color.Pink;
			ScriptManager.RegisterStartupScript(this, this.GetType(), "PopMsje", "openModal2Textos();", true);
			return;
		}
		else
		{
			validarEntero = cls_ValidacionCampos.validarNumeroEntero(cantidad);
 
			if (!validarEntero)
			{
				lbl_2textos_mensajeTitulo.Text = "ERROR EN EL CAMPO";
				lbl_2textos_mensajeDescripcion.Text = "La cantidad ingresada no es de tipo entero.";
				((TextBox)(sender)).ForeColor = Color.Black;
				((TextBox)(sender)).BackColor = Color.Pink;
				ScriptManager.RegisterStartupScript(this, this.GetType(), "PopMsje", "openModal2Textos();", true);
				return;
			}
		}
	}
 
	#endregion Validar Campos TextBox
 
	#region Validar Negativos
 
	if (cantidad.Trim() != "")
	{
		float cantidadPosNeg = float.Parse(cantidad);
 
		if (cantidadPosNeg < 0)
		{
			((TextBox)(sender)).Text = (cantidadPosNeg * (-1)).ToString();
		}
 
	}
 
	#endregion Validar Negativos
 
	cantidad = ((TextBox)(sender)).Text.Trim();
 
	#region Validar Minimos y Maximos
 
	if (cantidad.Trim() != "")
	{
		float valorSugeridoMin = float.Parse(currentRow.Cells[5].Text); // Valor del campo de Sugerido Mínimo
		float valorSugeridoMax = float.Parse(currentRow.Cells[6].Text); // Valor del campo de Sugerido Máximo
		float cantidadFloat = float.Parse(cantidad);
 
		if (cantidadFloat < valorSugeridoMin)
		{
			lbl_2textos_mensajeTitulo.Text = "La cantidad es MENOR al Sugerido Mínimo ";
			lbl_2textos_mensajeDescripcion.Text = "";
			((TextBox)(sender)).ForeColor = Color.Blue;
			((TextBox)(sender)).BackColor = Color.White;
			ScriptManager.RegisterStartupScript(this, this.GetType(), "PopMsje", "openModal2Textos();", true);
			return;
		}
 
		if (cantidadFloat > valorSugeridoMax)
		{
			lbl_2textos_mensajeTitulo.Text = "La cantidad es MAYOR al Sugerido Máximo ";
			lbl_2textos_mensajeDescripcion.Text = "";
			((TextBox)(sender)).ForeColor = Color.Red;
			((TextBox)(sender)).BackColor = Color.White;
			ScriptManager.RegisterStartupScript(this, this.GetType(), "PopMsje", "openModal2Textos();", true);
 
		}
	}
 
	#endregion Validar Minimos y Maximos
 
}

Aquí adjunto una imagen de como se ve el grid corriendo. El grid lo tengo dentro de un DIV con la propiedad
1
overflow:scroll
para que independiente del tamaño que tenga no se expanda la página más de lo debido.

imagen_gridFYV

Si aplico el evento de ese TextBox desde una de las celdas de hasta abajo, después de ejecutarse el mismo me regresa al principio.

Si me pueden ayudar con esta duda se los agradecería.

También debo mencionar que en mi master page y en la página del asp tengo la propiedad:
1
MaintainScrollPositionOnPostback="true"

Y aún así no aplica este cambio
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