2014-11-11 2 views
1

И используя VS 2010 с C# .I хочет выбрать Muliple строк, проверенных с помощью клавиши переключения в виде сеткиCheckbox Muliple выбор с помощью клавиши переключения в GridView asp.net

я попытался с помощью Java Script, но не работаю

Вот моя сетка

<asp:GridView ID="gvDetails" runat="server" AutoGenerateColumns="false" CssClass="normtxt" 
            HeaderStyle-BackColor="#819FF7" ShowFooter="true" HeaderStyle-Font-Bold="true" EmptyDataText="No records found" 
            OnRowCancelingEdit="gvDetails_RowCancelingEdit" 
            OnRowDeleting="gvDetails_RowDeleting" 
            OnRowEditing="gvDetails_RowEditing" OnRowUpdating="gvDetails_RowUpdating" OnRowCommand="gvDetails_RowCommand"> 
            <RowStyle ForeColor="#000066" BorderColor="#7BA1C3" /> 
             <HeaderStyle BackColor="#7BA1C3" Font-Bold="false" ForeColor="White" CssClass="lockHeadDivdgrid" /> 
            <Columns> 
             <asp:TemplateField ItemStyle-Width="40px"> 
              <HeaderTemplate> 
               <asp:CheckBox ID="chkAll" runat="server" Text="All" AutoPostBack="true" 
                OnCheckedChanged="chkAll_OnCheckedChanged" /> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <asp:CheckBox ID="chkOne" onclick='<%# string.Format("javascript:selectCheckbox(this,{0});", Container.DataItemIndex) %>' runat="server" AutoPostBack="true" OnCheckedChanged="chkAll_OnCheckedChanged" /> 
              </ItemTemplate> 

             </asp:TemplateField> 
             <asp:TemplateField HeaderText="ParagraphStyle" ItemStyle-Width="150" ItemStyle-HorizontalAlign="Left"> 
              <ItemTemplate> 
               <asp:Label ID="lblParagraphStyle" runat="server" Text='<%#Eval("ParagraphStyle") %>' /> 
               <asp:TextBox ID="txtParagraphStyle" runat="server" Text='<%# Eval("ParagraphStyle") %>' 
                Visible="false" CssClass="txt_1"></asp:TextBox> 
               <asp:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" ServiceMethod="AutoCompleteAjaxParaRequest" 
                ServicePath="Service1.asmx" MinimumPrefixLength="1" CompletionInterval="100" 
                EnableCaching="false" CompletionSetCount="10" TargetControlID="txtParagraphStyle" 
                FirstRowSelected="true" ShowOnlyCurrentWordInCompletionListItem="true"> 
               </asp:AutoCompleteExtender> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField HeaderText="Parent" ItemStyle-Width="150" ItemStyle-HorizontalAlign="Left"> 
              <ItemTemplate> 
               <asp:Label ID="lblParent" runat="server" Text='<%# Eval("Parent") %>'></asp:Label> 
               <asp:TextBox ID="txtParent" runat="server" Text='<%#Eval("Parent") %>' Visible="false" CssClass="txt_1" /> 
               <asp:AutoCompleteExtender ID="AutoCompleteExtender2" runat="server" ServiceMethod="AutoCompleteAjaxParentRequest" 
                ServicePath="Service1.asmx" MinimumPrefixLength="1" CompletionInterval="100" 
                EnableCaching="false" CompletionSetCount="10" TargetControlID="txtParent" FirstRowSelected="true" 
                ShowOnlyCurrentWordInCompletionListItem="true"> 
               </asp:AutoCompleteExtender> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField HeaderText="fnCriteria" ItemStyle-Width="150" ItemStyle-HorizontalAlign="Left"> 
              <ItemTemplate> 
               <asp:Label ID="lblfnCriteria" runat="server" Text='<%# Eval("fnCriteria") %>'></asp:Label> 
               <asp:TextBox ID="txtfnCriteria" runat="server" Text='<%#Eval("fnCriteria") %>' Visible="false" 
                CssClass="txt_1" /> 
               <asp:AutoCompleteExtender ID="AutoCompleteExtender3" runat="server" ServiceMethod="AutoCompleteAjaxfnCriteriaRequest" 
                ServicePath="Service1.asmx" MinimumPrefixLength="1" CompletionInterval="100" 
                EnableCaching="false" CompletionSetCount="10" TargetControlID="txtfnCriteria" 
                FirstRowSelected="true" ShowOnlyCurrentWordInCompletionListItem="true"> 
               </asp:AutoCompleteExtender> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField HeaderText="fnCase" ItemStyle-Width="10" ItemStyle-HorizontalAlign="Left"> 
              <ItemTemplate> 
               <asp:Label ID="lblfnCase" runat="server" Width="50px" Text='<%# Eval("fnCase") %>'></asp:Label> 
               <asp:TextBox ID="txtfnCase" runat="server" Text='<%#Eval("fnCase") %>' Visible="false" CssClass="txt_1" /> 
               <asp:AutoCompleteExtender ID="AutoCompleteExtender4" runat="server" ServiceMethod="AutoCompleteAjaxfnCaseRequest" 
                ServicePath="Service1.asmx" MinimumPrefixLength="1" CompletionInterval="100" 
                EnableCaching="false" CompletionSetCount="10" TargetControlID="txtfnCase" FirstRowSelected="true" 
                ShowOnlyCurrentWordInCompletionListItem="true"> 
               </asp:AutoCompleteExtender> 

              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField HeaderText="fnFormat" ItemStyle-Width="150" ItemStyle-HorizontalAlign="Left"> 
              <ItemTemplate> 
               <asp:Label ID="lblfnFormat" runat="server" Text='<%# Eval("fnFormat") %>'></asp:Label> 
               <asp:TextBox ID="txtfnFormat" runat="server" Text='<%#Eval("fnFormat") %>' Visible="false" CssClass="txt_1" /> 
               <asp:AutoCompleteExtender ID="AutoCompleteExtender5" runat="server" ServiceMethod="AutoCompleteAjaxfnFormatRequest" 
                ServicePath="Service1.asmx" MinimumPrefixLength="1" CompletionInterval="100" 
                EnableCaching="false" CompletionSetCount="10" TargetControlID="txtfnFormat" FirstRowSelected="true" 
                ShowOnlyCurrentWordInCompletionListItem="true"> 
               </asp:AutoCompleteExtender> 
              </ItemTemplate> 
             </asp:TemplateField> 

И мой браузер

<script type="text/javascript"> 
    var startingIndex = 0, gridViewID = '<%= gvDetails.ClientID %>'; 
    function selectCheckbox(checkbox, selectedInded) { 
     alert(gridViewID); 
      if (event.shiftKey) { 
       //shift end 
       alert(""); 
       if (startingIndex < selectedInded) 
       //forward 
        $(':checkbox', '#' + gridViewID).slice(startingIndex, selectedInded).prop("checked", true); 
       else 
       //backward 
        $(':checkbox', '#' + gridViewID).slice(selectedInded, startingIndex).prop("checked", true); 
      } 
      startingIndex = selectedInded; 
     } 
</script> 

Предложите мне найти решение. заблаговременно

+0

Я не совсем понимаю, что вы хотите достичь. Можете ли вы объяснить больше? Вы хотите использовать клавишу shift, чтобы щелкнуть только последний CheckBox и выбрать все флажки в диапазоне? – Alireza

+0

да я хочу выбрать все флажки в диапазоне – Bala

+0

Эксперты Пожалуйста, предложите здесь – Bala

ответ

0

Вы не можете получить доступ к объекту события, подобному этому. Он определяется только в области обработчика событий, в этом случае код внутри значения атрибута onclick. Если вы хотите вызвать другую функцию, вы должны передать объект event в качестве аргумента.

А также вы смешиваете события на клиентской и серверной стороне, которые не кажутся вам такими, поэтому я удалил обработчик событий сервера и установил AutoPostBack в false.

Ваш флажок в коде разметки становится:

<asp:CheckBox ID="chkOne" onclick='<%# string.Format("javascript:selectCheckbox(event,{0});", Container.DataItemIndex) %>' runat="server" AutoPostBack="false" /> 

И сценарий:

<script type="text/javascript"> 
    var startingIndex = 0, gridViewID = '<%= gvDetails.ClientID %>'; 
    function selectCheckbox(e, selectedIndex) { 
      if (e.shiftKey) { alert("shift pressed"); 
       if (startingIndex < selectedIndex) 
       { 
        alert($(':checkbox', '#' + gridViewID).length); 
        $(':checkbox', '#' + gridViewID).slice(startingIndex, selectedIndex).prop("checked", true); 
       } 
       else 
        $(':checkbox', '#' + gridViewID).slice(selectedIndex, startingIndex).prop("checked", true); 
      } 
      startingIndex = selectedIndex; 
     } 
</script> 

Это мой тест, который работает отлично. Я использовал простой DataSource, но это будет работать и с любым другим источником. Просто чтобы дать вам правильное направление.

WebForm1.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
    <script type="text/javascript"> 
    var startingIndex = 0, gridViewID = '<%= gvDetails.ClientID %>'; 
    function selectCheckbox(e, selectedIndex) { 
     if (e.shiftKey) { 
      alert("shift pressed"); 
      if (startingIndex < selectedIndex) { 
       alert($(':checkbox', '#' + gridViewID).length); 
       $(':checkbox', '#' + gridViewID).slice(startingIndex, selectedIndex).prop("checked", true); 
      } 
      else 
       $(':checkbox', '#' + gridViewID).slice(selectedIndex, startingIndex).prop("checked", true); 
     } 
     startingIndex = selectedIndex; 
    } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:GridView ID="gvDetails" runat="server" AutoGenerateColumns="false"> 
      <Columns> 
       <asp:TemplateField ItemStyle-Width="40px"> 
        <HeaderTemplate> 
        </HeaderTemplate> 
        <ItemTemplate> 
         <asp:CheckBox ID="chkOne" onclick='<%# string.Format("javascript:selectCheckbox(event,{0});", Container.DataItemIndex) %>' runat="server" AutoPostBack="false" /> 
        </ItemTemplate> 
       </asp:TemplateField> 
       </Columns> 
     </asp:GridView> 

    </form> 
</body> 
</html> 

И WebForm1.aspx.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace WebApplication2 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      gvDetails.DataSource = new int[] { 0, 1, 2, 3, 4, 5, 6 }; 
      gvDetails.DataBind(); 
     } 

    } 
} 
+0

i, попробовал, как сказал, но не работал – Bala

+0

Это немного странно, что происходит? вы получаете сообщение об ошибке? – Alireza

+0

Не получите ошибку, но нет вывода – Bala

Смежные вопросы