T 在gridview 中使用了复选框列。单击链接按钮时,应检查是否选中了 gridview 中的复选框。如果未选中任何复选框,则应显示警报(“至少检查一个复选框”)。
4 回答
您必须在页面中添加一些自定义 Javascript 才能显示客户端警报。这是我编写的一个方法,它适用于名为“GridView1”的 GridView(如果您刚刚将控件拖到 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>
您可以看到它为GridView
控件设置了一个变量,然后在循环中遍历所有子控件for
。如果孩子是 acheckbox
并且它是checked
,那么我们将valid
变量设置为 true。如果我们到达迭代结束并且没有找到选中的复选框,则valid
保持为 false 并且我们执行警报。
要将其链接到您GridView
的 ASPX 页面上,首先将按钮列设置为 a并用您的客户端代码TemplateField
包围。LinkButton
如果您使用设计器设置列,则可以使用列编辑器中的“将此字段转换为模板字段”链接)。这是您最终会得到的源示例:
<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...
使用TemplateField
允许我们添加我们喜欢的任何客户端代码。在这里,我们添加一个span
并使用onclick
来调用我们的ClientCheck
方法。
如果您不关心警报,您可以通过使用CustomValidator
在服务器端执行的控件来实现您的目标。
我希望这有帮助。
我找到了答案。及其工作...
功能 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
}
}
和 girdview 代码是...
<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>
并且有一个链接按钮....
我没有在网格视图中使用该复选框,但是您不会在网格视图中的列周围进行 for 循环并检查状态吗?Myabe 添加一个计数,如果为 0,则发出警报。
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');
}