如何使用模板字段在gridview中排序

时间:2009-12-14 21:08:24

标签: c# asp.net gridview sorting

当你在aspx页面中使用SQL数据源填充gridview时,排序工作正常......

但现在我正在使用模板字段,并且列在代码隐藏中单独填充,并且排序不起作用...

我的代码是

<asp:GridView ID="GridView1" runat="server" AllowSorting="True" 
                          AutoGenerateColumns="False" 
                           ondatabound="GridView1_DataBound" 
                        onrowdatabound="GridView1_RowDataBound">


               <Columns>
               <asp:TemplateField HeaderText="File Name" ItemStyle-Width="40%"  >
                                <EditItemTemplate>
                                    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:Label ID="Label1" runat="server"></asp:Label>
                                </ItemTemplate>
                                <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                            </asp:TemplateField>

                            <asp:TemplateField HeaderText="Failure Count" ItemStyle-Width="10%" >
                                <EditItemTemplate>
                                    <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:Label ID="Label3" runat="server"></asp:Label>
                                </ItemTemplate>
                                <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                                <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle"  />
                            </asp:TemplateField>
               </Columns></GridView>

我的代码隐藏是:

    DataTable dt = new DataTable();
        SqlConnection connection = new SqlConnection();
        connection.ConnectionString = ConfigurationManager.ConnectionStrings["SumooHAgentDBConnectionString"].ConnectionString;
        connection.Open();
        SqlCommand sqlCmd = new SqlCommand("SELECT  FileName,FailureCount from Files where MachineID=@strID , connection);
        SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
        sqlCmd.Parameters.AddWithValue("strID", strID);

        sqlDa.Fill(dt);

        if (dt.Rows.Count > 0)
        {
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                string nameoffiles = dt.Rows[i]["FileName"].ToString();
                buFailureCode.Add(code);
                string count = dt.Rows[i]["BuFailureCount"].ToString();
                buFailureCount.Add(count);
            }

        }
        connection.Close();
    }


 protected void GridView1_DataBound(object sender, EventArgs e)
    {
        if (namesOfFiles.Count != 0)
        {
            for (int i = 0; i < namesOfFiles.Count; i++)
            {
                GridViewRow myRow = GridView1.Rows[i];
                Label Label1 = (Label)myRow.FindControl("Label1");

                Label Label3 = (Label)myRow.FindControl("Label3");
                Label1.Text = namesOfFiles[i].ToString();

                Label3.Text = buFailureCount[i].ToString();

            }}}

2 个答案:

答案 0 :(得分:1)

设置SortExpression

答案 1 :(得分:0)

我认为你必须处理OnSorting事件并在代码隐藏中自己进行实际排序。 The API documentation has an example