http://expert.csdn.net/Expert/topic/1832/1832289.xml?temp=.9627344

解决方案 »

  1.   

    要是用 vb.net 很容易实现:
    <asp:TemplateColumn>
    <ItemTemplate>
       <asp:Label id=Label1 runat="server" Text='<%# DataBinder.Eval(Container, "ItemIndex")+1 %>'></asp:Label>
    </ItemTemplate>
    要是 c# 稍微复杂点
    用上边的方法 编译会出错
    用<asp:TemplateColumn>
    <ItemTemplate>
       <asp:Label id=Label1 runat="server" Text='<%# DataBinder.Eval(Container, "ItemIndex") %>'></asp:Label>
    </ItemTemplate
    的到的行号是 0,1,2,3,要想得到 1,2,3,需要用下面的方法:
    <asp:BoundColumn HeaderText="行号"></asp:BoundColumn>//假设为第0列
    在datagrid 的 itemdatabinded 事件中 
    private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if (e.Item.ItemIndex >= 0)
    {
    int i = e.Item.ItemIndex +1;
    e.Item.Cells[0].Text = i.ToString();//0为列号
    }
    }
      

  2.   

    c#:
    <asp:TemplateColumn HeaderText="asdf">
    <ItemTemplate>
    <FONT face="宋体">
    <asp:Label id=Label2 runat="server" Text='<%# Container.ItemIndex+1 %>'>
    </asp:Label></FONT>
    </ItemTemplate>
    </asp:TemplateColumn>
      

  3.   

    解决了,用网络游仔的方法,我在数据库里最前面加了一个"序号"的字段,里面没有值,然后直接调用在datagrid 的 itemdatabinded 事件,即可 
    private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if (e.Item.ItemIndex >= 0)
    {
    int i = e.Item.ItemIndex +1;
    e.Item.Cells[0].Text = i.ToString();//0为列号
    }
    }
    这样数据库里的序号是什么并不重要,显示绝对是连续的.
      

  4.   

    补充:
    为什么要这么做呢,如果DataGrid中有模板列,还有其它列是动态生成的,如果事先先把序号给绑定了,那么显现的结果是序号反而在后面不理想.所以只要数据库里最初字段是序号,不管其有没有数据,客户看时去是有连续的.