C# 排序时未将字符串识别为有效的布尔值

C# 排序时未将字符串识别为有效的布尔值,c#,asp.net,sorting,gridview,C#,Asp.net,Sorting,Gridview,我正在尝试将排序功能添加到一个旧的asp:Gridview中,由于某些原因,使用它真的很痛苦。我尝试过多种不同的方法,但都失败了。我真的很感激你能帮我。我已经看过代码项目和MSDN的示例,但没有任何帮助。这是我的最新代码: <asp:SqlDataSource ID="grdVwCustomer_DataSource" runat="server" ConnectionString="<%$ ConnectionStrings:DBConnectingString %>"&

我正在尝试将排序功能添加到一个旧的asp:Gridview中,由于某些原因,使用它真的很痛苦。我尝试过多种不同的方法,但都失败了。我真的很感激你能帮我。我已经看过代码项目和MSDN的示例,但没有任何帮助。这是我的最新代码:

<asp:SqlDataSource ID="grdVwCustomer_DataSource" runat="server" 
 ConnectionString="<%$ ConnectionStrings:DBConnectingString %>">
</asp:SqlDataSource>
<asp:Gridview ID="grdVwCustomer" runat="server" AutoGenerateColumns="false" 
  AllowSorting="true" DataKeyNames="CustomerID" OnSorting="grdVwCustomer_Sorting"
  DataSourceID="grdVwCustomer_DataSource">
 <asp:TemplateField HeaderText="User Name" SortExpression="UserName">
  <ItemTemplate>
     <%# DataBinder.Eval( Container.DataItem, "UserName" )%>&nbsp;
  </ItemTemplate>
 </asp:TempateField>
</asp:Gridview>

protected void Page_Load( object sender, EventArgs e )
    {
        string query = "SELECT * FROM vPanel_Customer WHERE DeletionStateCode=0";
        grdVwCustomer_DataSource.SelectCommand = query;
        grdVwCustomer.DataBind();
    }


protected void grdVwCustomer_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataBind(Convert.ToBoolean(e.SortExpression)); ****this line gets the error****
    }

错误
Guid应该是32位…
显示在这一行CustomerID=new Guid(例如CommandArgument.ToString())

您的问题是SortExpression您的排序表达式是
SortExpression=“UserName”
,但您试图在这里将其转换为布尔值
convert.ToBoolean(e.SortExpression)

用户名不是一个布尔值,当然会失败,为了安全转换(虽然不是为了让它在您的场景中正常工作,您可以执行
bool.TryParse(“true”,out myBoolVar)


查看此项和此项,了解如何正确使用SortExpression并允许排序。

您的问题是SortExpression您的排序表达式是
SortExpression=“UserName”
,但您试图在此处将其转换为布尔值
convert.ToBoolean(例如,SortExpression)

用户名不是一个布尔值,当然会失败,为了安全转换(虽然不是为了让它在您的场景中正常工作,您可以执行
bool.TryParse(“true”,out myBoolVar)


查看这个和这个,了解如何正确使用SortExpression并允许排序。

那么…问题在哪里,哪一行?编辑原始帖子以显示哪一行出错,感谢您指出@Jasonso…问题在哪里,哪一行?编辑原始帖子以显示哪一行出错,感谢您指出这一点在@jasontanks外,我添加了
case“UserName”:if(e.SortDirection==SortDirection.Ascending){grdVwCustomer.DataSource=“SELECT*FROM vPanel_Customer WHERE DeletionStateCode=0 ORDER BY UserName”;grdVwCustomer.DataBind();}
到代码隐藏,现在出现错误
DataSource不允许在
DataBind()上进行服务器端分页
line.我是否需要case语句中的其他内容?@jlg您正在尝试运行服务器端代码,但它不喜欢。请尝试单独运行查询,然后绑定结果集,如本例所示,运行查询get
DataSet
(尽管我相信您可以使用
数据表
,甚至使用
POCO
的集合)然后将其绑定到您的网格。我尝试使用您提供的@Jason示例。我得到错误
Guid应包含32位数字和4个破折号….
我将在原始帖子中添加我的编辑。@jlg很明显
e.CommandArgument.ToString()
不是有效的guid,正如错误所提示的,您需要调试并查看您得到了什么以及原因,我认为这与如何使用SortExpressionOh完全无关。好的。我会检查一下。这部分代码自2008年构建以来一直在工作,所以我想知道发生了什么。我假设这是错误数据。谢谢,我添加了
案例“UserName”:如果(e.SortDirection==SortDirection.Ascending){grdVwCustomer.DataSource=“SELECT*FROM vPanel_Customer WHERE DeletionStateCode=0 ORDER BY UserName”;grdVwCustomer.DataBind()}
到后面的代码,现在出现错误
DataSource不允许在
DataBind()上进行服务器端分页
line.我是否需要case语句中的其他内容?@jlg您正在尝试运行服务器端代码,但它不喜欢。请尝试单独运行查询,然后绑定结果集,如本例所示,运行查询get
DataSet
(尽管我相信您可以使用
数据表
,甚至使用
POCO
的集合)然后将其绑定到您的网格。我尝试使用您提供的@Jason示例。我得到错误
Guid应包含32位数字和4个破折号….
我将在原始帖子中添加我的编辑。@jlg很明显
e.CommandArgument.ToString()
不是一个有效的guid,正如错误所提示的,您需要调试并查看您得到了什么以及原因,我认为这与如何使用SortExpressionOh毫无关系。好的。我会检查它。这部分代码自2008年构建以来一直在工作,所以我想知道发生了什么。我假设它是坏数据。谢谢
 protected void grdVwCustomer_Sorting(object sender, GridViewSortEventArgs e)
    {
        switch (e.SortExpression)
        {
            case "UserName":
                if (e.SortDirection == SortDirection.Ascending)
                {
                    String queryString = "SELECT * FROM vPanel_Customer WHERE DeletionStateCode=0 ORDER BY UserName";
                    DataSet ds = GetData(queryString);
                    if (ds.Tables.Count > 0)
                    {
                        grdVwCustomer.DataSource = ds;
                        grdVwCustomer.DataBind();
                    }
                    else
                    {
                        //show message to user
                    }
                }
                break;
        }
    }



DataSet GetData(String queryString)
    {

        // Retrieve the connection string stored in the Web.config file.
        String connectionString = ConfigurationManager.ConnectionStrings["DBConnectingString"].ConnectionString;

        DataSet ds = new DataSet();

        try
        {
            // Connect to the database and run the query.
            SqlConnection connection = new SqlConnection(connectionString);
            SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);

            // Fill the DataSet.
            adapter.Fill(ds);
        }
        catch (Exception ex)
        {
            Logging.Log.LogException(Forbin.Logging.PageType.CustomerManage,   Logging.MessageType.Exception, ex.ToString());
            UIUtils.ShowMessageToUser("OnErrorMesg", this.Page);
        }
        return ds;
    }