【问题标题】:Id of gridview shows wrong sequencegridview 的 ID 显示错误的顺序
【发布时间】:2014-04-28 05:42:09
【问题描述】:

我有一个 gridview,其中包含列(Id、Task、Reward、Time Allotted、Uploader)..我可以成功地将数据插入到 gridview 中,直到第 13 页的 taskId 为 118,但之后数据开始显示在TaskId 7 之后的第 1 页。

所以序列就像 ....5,6,7,119,120,121,122,8,9,10..... 所以所有的新数据都在 7 和 8 之间插入。为什么会这样?我该如何纠正这个问题?

我不认为这是代码错误,但仍然是我的:

    protected void btnPost_Click(object sender, EventArgs e)
{
    string CS = ConfigurationManager.ConnectionStrings["EasyRozMoney_ConnectionString"].ConnectionString;
    using (SqlConnection con = new SqlConnection(CS))
    {
        SqlCommand cmd = new SqlCommand("spTasks", con);
        cmd.CommandType = System.Data.CommandType.StoredProcedure;

        cmd.Parameters.AddWithValue("@Title", txtTitle.Text);
        cmd.Parameters.AddWithValue("@Body", txtBody.Text);
        cmd.Parameters.AddWithValue("@Reward", txtRewards.Text);
        cmd.Parameters.AddWithValue("@TimeAllotted", txtTime.Text);
        cmd.Parameters.AddWithValue("@PosterName", txtPoster.Text);

        con.Open();
        cmd.ExecuteNonQuery();
        lblStatus.Text = "Task Posted Successfully.";

    }

这里是网格视图:

       <asp:GridView ID="GridView1" runat="server" Width="936px" AllowPaging="True" AutoGenerateColumns="False" CellPadding="3" DataSourceID="SqlDataSource1" OnRowCommand="GridView1_RowCommand" style="text-align: center" BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellSpacing="2" OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
                <Columns>
                    <asp:BoundField DataField="TaskId" HeaderText="TaskId" InsertVisible="False" ReadOnly="True" SortExpression="TaskId" />
                    <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
                    <asp:BoundField DataField="Body" HeaderText="Body" SortExpression="Body" Visible="false" />
                    <asp:BoundField DataField="Reward" HeaderText="Reward(Rs)" SortExpression="Reward" />
                    <asp:BoundField DataField="TimeAllotted" HeaderText="Time(Min)" SortExpression="TimeAllotted" />
                    <asp:BoundField DataField="PosterName" HeaderText="Uploader" SortExpression="PosterName" />
                    <asp:ButtonField ButtonType="Button" CommandName="Select" Text="Perform Task" ControlStyle-ForeColor="White"  ControlStyle-Font-Bold="true">
               <ControlStyle BackColor="#CC6600" Font-Bold="True" ForeColor="White"></ControlStyle>
                    </asp:ButtonField>
                </Columns>
                <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
                <HeaderStyle BackColor="#CC6600" Font-Bold="True" ForeColor="White" />
                <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
                <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
                <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
                <SortedAscendingCellStyle BackColor="#FFF1D4" />
                <SortedAscendingHeaderStyle BackColor="#B95C30" />
                <SortedDescendingCellStyle BackColor="#F1E5CE" />
                <SortedDescendingHeaderStyle BackColor="#93451F" />
            </asp:GridView>

            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:EasyRozMoney_ConnectionString %>" SelectCommand="SELECT * FROM [Task]"></asp:SqlDataSource>

我的sql表如下:

       Create table Task
       (
       TaskId int Identity(1,1),
       Title varchar(100),
       Body varchar(500),
       Reward decimal(4,2),
       TimeAllotted int,
       PosterName varchar(100)
       )

我的存储过程:

      Create proc spTasks
      @Title varchar(100),
      @Body varchar(500),
      @Reward decimal(4,2),
     @TimeAllotted int,
      @PosterName varchar(100)
      as
       begin
       Insert into Task values(@Title,@Body,@Reward,@TimeAllotted,@PosterName)
       end

【问题讨论】:

  • 你能分享你用来绑定你的gridview和数据的代码吗?
  • @DamienJoe 编辑了我的问题
  • 使用任务 ID 数据类型 (int) 作为主键,我认为您必须在数据类型 varchar 中使用。
  • @NayeemMansoori 检查我编辑的问题。它清楚地指出我制作了一个带有 taskid 作为 int 数据类型的表

标签: c# asp.net gridview


【解决方案1】:

您可以更改数据源的 select 语句的默认排序。如果您希望最近的记录显示在最后:默认排序,如果您希望它们在网格中首先显示:按降序排序。

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:EasyRozMoney_ConnectionString %>" 
 SelectCommand="SELECT * FROM [Task] ORDER BY TASKID"></asp:SqlDataSource>

请注意,您应该仅在测试用例中使用 select '*'。在现实世界的场景中,这将导致执行表扫描的性能下降。在您的 select 语句中,仅选择在您的 UI 中显示所需的列。

正如其他人指出的那样,请检查您的数据库列的类型是否为 int 或 varchar,如果稍后您可以将列转换为 int,或者最好将其完全创建为 int。

【讨论】:

  • 它仍在发布,没有任何顺序。我刚刚发布了 TaskId 127,它就在 TaskId 107 之后
  • @mash 当您在数据库中运行查询时,您得到正确的排序顺序了吗?
  • @Mash 当您通过 gridview 对行进行排序时会发生什么?那么顺序正确吗?
  • 所以当我使用 sql server 插入数据时,它工作得非常好。所以我的存储过程有问题吗??
  • 我也试过通过存储过程运行,它工作正常。所以它一定是我的代码隐藏
猜你喜欢
  • 2014-10-05
  • 2017-08-26
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
  • 1970-01-01
  • 2015-07-30
相关资源
最近更新 更多