使用文本框和checkboxlist asp.net c#搜索数据gridview

时间:2014-11-20 07:59:17

标签: c# asp.net sql-server-2008

我想使用textbox和checkboxlist来使用asp.net c#在gridview中搜索数据。使用文本框可以搜索数据。但是对于checkboxlist,只有在选中一个复选框时才能搜索数据。如果选中多个复选框,则无法搜索数据。非常感谢你的帮助。

代码:

c#c​​ode

protected void btnSearch_Click(object sender, EventArgs e)
{

    if (cblDay.SelectedIndex != -1)
    {
        foreach (ListItem val in cblDay.Items)
        {
            if (val.Selected == true)
            {

                RptRateData.Day += val.Value + "";
            }

        }
    }


    RptRateData.RateAmount = txtRate.Text.Trim();

    BindGrid();
}

类的代码:

public string RateAmount { get; set; }
public string Day { get; set; }

internal DataSet GetRptRateSet()
        {

            DataSet tmpDS = new DataSet();

            try
            {
                string strSQL = @"SELECT  ComplexRateInfo.ComplexRateId, 
                                ComplexRateDetailInfo.Day,  
                                ComplexRateInfo.RateAmount 
                                FROM ComplexRateInfo  
                                LEFT JOIN ComplexRateDetailInfo ON ComplexRateInfo.ComplexRateId = ComplexRateDetailInfo.ComplexRateId ";
                string whereSQL = " WHERE";
                string orderBySQL = " order by  Day ;";
                int filterCount = 0; //to keep track of needed filter that are going to be used by the sql string
                string[] sIndex = new string[2]; //to keep track of scalar variable needed by the sql, four string of sIndex because maximum filter available is 4
                int indexCount = 0; //count to access sIndex members


                //filter with or without day
                if (_ds.Day != null && _ds.Day != "")
                {
                    if (filterCount > 0) //query need additional filter
                        whereSQL = whereSQL + " AND ComplexRateDetailInfo.Day LIKE '{" + filterCount + "}'";
                    else //if this is the first filter
                        whereSQL = whereSQL + " ComplexRateDetailInfo.Day LIKE '{" + filterCount + "}'";

                    filterCount++;
                    sIndex[indexCount] = _ds.Day;
                    indexCount++;

                }


                //filter with or without rate amount
                if (_ds.RateAmount != null && _ds.RateAmount != "")
                {
                    if (filterCount > 0) //query need additional filter
                        whereSQL = whereSQL + " AND ComplexRateInfo.RateAmount LIKE '{" + filterCount + "}'";
                    else //if this is the first filter
                        whereSQL = whereSQL + " ComplexRateInfo.RateAmount LIKE '{" + filterCount + "}'";

                    filterCount++;
                    sIndex[indexCount] = _ds.RateAmount;
                    indexCount++;

                }

                //build complete query with no filter at all
                if (filterCount == 0)
                {
                    strSQL = strSQL + orderBySQL;
                    tmpDS = Db.GetDataSet(string.Format(strSQL));
                }

                //build complete query with 1 or more filter
                else
                {
                    strSQL = strSQL + whereSQL + orderBySQL;
                    tmpDS = Db.GetDataSet(string.Format(strSQL, sIndex));
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }

            return tmpDS;
        }

1 个答案:

答案 0 :(得分:0)

您的代码中有两个错误。

  1. 从CheckBoxList为RptRateData.Day分配值。
  2. 说明:您可以在不使用任何分隔符的情况下将所选值分配给对象。因此,例如,如果您根据代码选择了1,2,4天,则RptRateData.Day的值将为124.除此之外,应使用逗号分隔,如下所示:

        var selectedDays = string.Empty;
        foreach (ListItem val in cblDay.Items)
        {
            if (val.Selected == true)
            {
    
                selectedDays += "'" + val.Value + "',";
            }
        }
    
    RptRateData.Day = selectedDays.TrimEnd(new char[] { ',' });
    
    1. 现在来看你动态制作的SQL查询中的第二点。
    2. 说明:在WHERE子句中的此查询中,您使用Like运算符ComplexRateDetailInfo.Day。这将不再有效。而不是你应该使用IN运算符。

      注意:您确定运算符正在使用大括号(' {'和'}&#39 ;)没有'%'符号?