1

グリッドビューでチェックボックス列を使用しました。リンクボタンをクリックすると、グリッドビューのチェックボックスがチェックされているかどうかを確認する必要があります。どのチェックボックスもチェックされていない場合は、警告が表示されます (「少なくとも 1 つのチェックボックスをチェックしてください」)。

4

4 に答える 4

1

私は答えを見つけました。そしてその働き...

関数 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>

そしてリンクボタンがあります....

于 2008-12-09T08:53:56.413 に答える
1

クライアント側のアラートを表示するには、カスタム 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子が でありcheckbox、それがである場合、変数を truecheckedに設定します。valid繰り返しの最後に到達し、チェックされたチェックボックスが見つからない場合は、validfalse のままでアラートを実行します。

これをGridViewASPX ページにリンクするには、まずボタン列を aにして、クライアント側のコードでTemplateField囲みます。LinkButtonデザイナーを使用して列を設定した場合は、列エディターで [このフィールドを TemplateField に変換] リンクを使用できます)。最終的に得られるソースの例を次に示します。

<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好きなクライアント側コードを追加できます。ここでは、メソッドを呼び出すためにa を追加しspanて使用しています。onclickClientCheck

アラートが気にならない場合はCustomValidator、サーバー側で実行されるコントロールを使用して目的を達成できます。

これが役立つことを願っています。

于 2008-12-08T14:57:51.750 に答える
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');
    }
于 2008-12-08T10:58:00.920 に答える
0

グリッドビューでチェックボックスを使用したことはありませんが、グリッドビューの列の周りで for ループを実行して状態を確認しませんか? Myabe はカウントを追加し、0 の場合はアラートします。

于 2008-12-08T10:45:34.083 に答える