c# - verificacion - cómo verificar el estado de las casillas de verificación en las columnas de la vista de cuadrícula al hacer clic en el botón
marcar casilla html (4)
No he usado la casilla de verificación en la vista de cuadrícula, pero ¿no harías un ciclo para recorrer las columnas en la vista de cuadrícula y verificaría el estado? Myabe agrega un conteo y si es 0 entonces alerta.
T usé la columna casilla de verificación en gridview. Al hacer clic en un botón de enlace, se debe verificar que las casillas de verificación en la vista de cuadrícula estén marcadas o no. Si no está marcada ninguna casilla de verificación, entonces debería mostrar una alerta ("Marque al menos una casilla de verificación").
Tendrá que agregar un JavaScript personalizado a su página para que se muestre la alerta del lado del cliente. Aquí hay un método que he escrito que funciona con un GridView llamado ''GridView1'' (este debería ser el nombre predeterminado si acaba de arrastrar el control a su página ASPX):
<script type="text/javascript">
function ClientCheck() {
var valid = false;
var gv = document.getElementById("GridView1");
for (var i = 0; i < gv.all.length; i++) {
var node = gv.all[i];
if (node != null && node.type == "checkbox" && node.checked) {
valid = true;
break;
}
}
if (!valid) {
alert("Invalid. Please select a checkbox to continue.");
}
return valid;
}
</script>
Puede ver que establece una variable para el control GridView
para comenzar, luego itera por todos los elementos secundarios en un ciclo for
. Si el niño es una checkbox
y está checked
, establecemos la variable valid
en verdadero. Si llegamos al final de la iteración y no se encuentran casillas marcadas, entonces valid
permanece falso y ejecutamos la alerta.
Para vincular esto en su GridView
en su página ASPX, primero haga que la columna del botón sea TemplateField
y rodee el LinkButton
con su código del lado del cliente. Si usó el diseñador para configurar sus columnas, puede usar el enlace "Convertir este campo en un campo TemplateField" en el editor de columnas). Aquí hay un ejemplo de la fuente con la que terminará:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1">
<Columns>
<asp:TemplateField HeaderText="Button Field" ShowHeader="False">
<ItemTemplate>
<span onclick="return ClientCheck();">
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="IDClick" Text=''<%# Eval("YourDataSourceItem") %>''></asp:LinkButton>
</span>
</ItemTemplate>
</asp:TemplateField>
// ...your remaining columns...
El uso de TemplateField
nos permite agregar cualquier código del lado del cliente que nos guste. Aquí estamos agregando un span
y usando onclick
para llamar a nuestro método ClientCheck
.
Si no le molesta la alerta, puede lograr sus objetivos utilizando un control CustomValidator
, que se ejecuta en el lado del servidor.
Espero que esto ayude.
var grid = document.getElementById("gridId"); //Retrieve the grid
var inputs = grid.getElementsByTagName("input"); //Retrieve all the input elements from the grid
var isValid = false;
for (var i=0; i < inputs.length; i += 1) { //Iterate over every input element retrieved
if (inputs[i].type === "checkbox") { //If the current element''s type is checkbox, then it is wat we need
if(inputs[i].checked === true) { //If the current checkbox is true, then atleast one checkbox is ticked, so break the loop
isValid = true;
break;
}
}
}
if(!isValid) {
alert(''Check at least one checkbox'');
}
Encontré la respuesta. y su funcionamiento ...
function checkBoxselectedornot () {
var frm=document.forms[''aspnetForm''];
var flag=false;
for(var i=0;i<document.forms[0].length;i++)
{
if(document.forms[0].elements[i].id.indexOf(''chkDownloadSelectedEvent'')!=-1)
{
if(document.forms[0].elements[i].checked)
{
flag=true
}
}
}
if (flag==true)
{
return true
}else
{
alert(''Please select at least one Event.'')
return false
}
}
y el código de girdview es ...
<asp:BoundField ItemStyle-Width ="100px" DataField ="EventStartDate" DataFormatString ="{0:g}" HeaderText ="<%$ Resources:stringsRes, ctl_EventList_StartDate %>" SortExpression ="EventStartDate" HtmlEncode ="true" ItemStyle-Wrap ="false" />
<asp:BoundField ItemStyle-Width="100px" DataField="EventDate" DataFormatString="{0:g}" HeaderText="<%$ Resources:stringsRes, ctl_EventList_Date %>" SortExpression="EventDate" HtmlEncode="true" ItemStyle-Wrap="false" />
<asp:ButtonField ItemStyle-Width="150px" ButtonType="Link" DataTextField="EventName" HeaderText="<%$ Resources:stringsRes, ctl_EventList_Event %>" SortExpression="EventName" CommandName="show_details" CausesValidation="false" />
<asp:BoundField DataField="EventLocation" HeaderText="<%$ Resources:stringsRes, ctl_EventList_Location %>" SortExpression="EventLocation" />
<asp:TemplateField HeaderText ="Select">
<ItemTemplate >
<asp:CheckBox ID="chkDownloadSelectedEvent" runat ="server" AutoPostBack ="false" Onclick="eachCheck();"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<RowStyle Height="25px" />
<HeaderStyle Height="30px"/>
</asp:GridView>
y hay un botón de enlace ...