2012-03-14 121 views
0

我想结合网格下面的数据源。当没有数据时,为什么我会在那里得到额外的一行?行数也是正确的,我可以看到,当我调试。为什么GridView中有额外的行?

Grid snapshot

Object[] users = new Object[100]; 
         int i = 0; 
         while (reader.Read()) 
         { 
           users[i++] = new { 
               userid= reader.GetString(0), 
               group = reader.GetString(1), 
               subgroup = reader.GetString(2), 
               }; 
         } 
         gridview_UserAccess.DataSource = users; 
         gridview_UserAccess.DataBind(); 

<asp:GridView ID="gridview_UserAccess" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None"> 
    <Columns> 
      <asp:TemplateField HeaderText="Select">     
       <ItemTemplate> 
        <asp:CheckBox ID="chkbox_Select" runat="server" /> 
       </ItemTemplate> 
      </asp:TemplateField>  
</Columns> 

     <AlternatingRowStyle BackColor="White" />    
     <EditRowStyle BackColor="#2461BF" /> 
     <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
     <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
     <RowStyle BackColor="#EFF3FB" /> 
     <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 

    </asp:GridView> 
+0

是否可编辑? – Arun 2012-03-14 23:40:20

+0

不,它是不可编辑 – 2012-03-15 04:50:41

回答

3

这是因为你在你的文件中的空行。由于这个reader.Read()是真的。用户标识,组和子组都是空字符串。所以用空对象创建一个用户对象,将其引导到空行。

+1

不错的想法,但我发现solution..not的根本原因,但。当我将数组的大小固定为我收到的行数时,没有多余的行。为什么需要更多的想法我猜.. – 2012-03-15 13:28:27

0

可能是因为你是在第一次读因此留下网友[0]空白递增我?尝试更改您的代码如下:

int i = -1; 
while (reader.Read()) 
{ 
    users[i++] = new { 
    userid= reader.GetString(0), 
    group = reader.GetString(1), 
    subgroup = reader.GetString(2), 
    }; 
} 
+0

除非我失去了一些东西,这是没有办法的办法后++运算符的作品。在您的代码的第一次迭代中,i ++将被评估为-1,这可能会引发indexofofrange异常。 – 2012-03-15 00:10:25

+2

我++的增量,它被称为后,++我会 – JCherryhomes 2012-03-15 00:47:18

+0

这似乎并不如此前增加,我的用户是有从指数0到4个,即5个用户 – 2012-03-15 04:51:35

相关问题