2017-02-09 9 views
0

У меня есть сетка с несколькими столбцами данных и столбец с флажками. Существует столбец под названием «Номер приложения», который содержит номера. Теперь я хочу, чтобы выбрать номер в проверенных строках и поместить их в массив. Как мне это сделать?Как решить исключение System.ArgumentOutOfRangeException?

Вот код, который я сделал до настоящего времени.

<asp:GridView ID="gvAppeals" runat="server" BackColor="White" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" CellPadding="4" 
    Width="665px" AutoGenerateColumns="False" OnSelectedIndexChanged="gvAppeals_SelectedIndexChanged1" 
    AllowPaging="True" PageSize="10" OnPageIndexChanging="gvAppeals_PageIndexChanging" OnRowDataBound="gvAppeals_RowDataBound"> 
    <Columns> 
     <asp:BoundField DataField="App_no" HeaderText="APP NO"> 
      <HeaderStyle HorizontalAlign="Left" /> 
      <ItemStyle Font-Size="Small" HorizontalAlign="Left" VerticalAlign="Middle" /> 
     </asp:BoundField> 
     <asp:BoundField DataField="EMP_FULLNAME" HeaderText="FULL NAME"> 
      <HeaderStyle HorizontalAlign="Left" /> 
      <ItemStyle Font-Size="Small" HorizontalAlign="Left" VerticalAlign="Middle" /> 
     </asp:BoundField> 
     <asp:BoundField DataField="EMP_NIC_NO" HeaderText="NIC"> 
      <HeaderStyle HorizontalAlign="Left" /> 
      <ItemStyle Font-Size="Small" HorizontalAlign="Left" VerticalAlign="Middle" /> 
     </asp:BoundField> 
     <asp:BoundField DataField="EMP_BIRTHDAY" HeaderText="BIRTH DATE" DataFormatString="{0:yyyy-MM-dd}"> 
      <HeaderStyle HorizontalAlign="Left" /> 
      <ItemStyle Font-Size="Small" HorizontalAlign="Left" VerticalAlign="Middle" /> 
     </asp:BoundField> 
     <asp:TemplateField> 
      <%--<HeaderTemplate> 
          <asp:CheckBox ID="chkHeader" runat="server" AutoPostBack="true" /> 
         </HeaderTemplate>--%> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkSelect" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
    <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" /> 
    <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" HorizontalAlign="Left" /> 
    <PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" /> 
    <RowStyle BackColor="White" ForeColor="Black" /> 
    <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" /> 
    <SortedAscendingCellStyle BackColor="#FEFCEB" /> 
    <SortedAscendingHeaderStyle BackColor="#AF0101" /> 
    <SortedDescendingCellStyle BackColor="#F6F0C0" /> 
    <SortedDescendingHeaderStyle BackColor="#7E0000" /> 
</asp:GridView> 

C# коды

protected void btnConfirm_Click(object sender, EventArgs e) 
    { 
     //DataSet ds = new DataSet(); 
     int[] numbers; 
     numbers = new int[gvAppeals.Rows.Count]; 
     int noOfRowsChecked = 0; 

     foreach (GridViewRow row in gvAppeals.Rows) 
     { 
      int rowIndex = row.RowIndex; 
      CheckBox chkrow = (CheckBox)row.FindControl("chkSelect"); 

      if (chkrow.Checked == true) 
      { 
       numbers[noOfRowsChecked] = Int32.Parse(gvAppeals.DataKeys[rowIndex]["App_no"].ToString()); 
       noOfRowsChecked++; 
      } 

      //update the dept by checking the selected appeal numbers 
      if (noOfRowsChecked > 0) 
      { 
       for (int i = 0; i < numbers.Length; i++) 
       { 
        int appNo = numbers[i]; 
        dba.confirmAppeal(appNo); 
       } 
      } 
      else 
      { 
       WebMsgBox.Show("Please select an application to confirm"); 
      } 
     } 
    } 
+0

Я бы просто изменить 'ИНТ [] numbers' в список' List число = новый список () '' используйте numbers.Add() ' –

+0

Я попытаюсь сейчас. – George

ответ

0

В GridView не определено DataKeys, оно всегда будет за пределами допустимого диапазона. Добавьте свойство DataKeyNames в GridView.

<asp:GridView ID="gvAppeals" runat="server" DataKeyNames="App_no" > 
+0

Это сработало спасибо за ответ. – George

2

Просто нежное напоминание о том, что вам нужно вычесть один (-1) на вашей индексации. Вероятно, это причина, по которой вы получаете System.ArgumentOutOfRangeException.

+0

Это скорее зависит от использования. Если вы вычтите '-1' в цикле' for', подобном этому, для (int i = 0; i <(numbers.Length -1); i ++) 'он никогда не достигнет последнего элемента. – VDWWD

+0

Попробуйте добавить контрольные точки на свой код и проверить, в какую строку вы получаете сообщение об ошибке. – mindOfAi

+0

получите ошибку в следующей строке -------> номера [noOfRowsChecked] = Int32.Parse (gvAppeals.DataKeys [rowIndex] ["App_no"]. ToString()); – George

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

  • Нет связанных вопросов^_^