Asp.net 当属性为null时,在FilterParameters中使用ControlParameter

Asp.net 当属性为null时,在FilterParameters中使用ControlParameter,asp.net,null,datalist,selectedvalue,controlparameter,Asp.net,Null,Datalist,Selectedvalue,Controlparameter,我有一个数据列表和表单视图;他们有不同的数据源,尽管他们获取相同的信息。FormView的数据源有一个FilterExpression,用于提取数据列表上选择的任何内容。在第一次加载时,DataList的SelectedValue自然为空。我希望FilterExpression会产生零行,但事实并非如此。如果我将DefaultValue设置为0,它会设置为0,但是当我从数据列表中选择某个内容时,参数永远不会更新。我做错了吗?事实证明,这有一个bug。解决方案是像这样附加一个OnFiltering

我有一个数据列表和表单视图;他们有不同的数据源,尽管他们获取相同的信息。FormView的数据源有一个FilterExpression,用于提取数据列表上选择的任何内容。在第一次加载时,DataList的SelectedValue自然为空。我希望FilterExpression会产生零行,但事实并非如此。如果我将DefaultValue设置为0,它会设置为0,但是当我从数据列表中选择某个内容时,参数永远不会更新。我做错了吗?

事实证明,这有一个bug。解决方案是像这样附加一个OnFiltering处理程序,我做了一些增强:

protected void FilteringCheck(Object sender, SqlDataSourceFilteringEventArgs e)
{
    // Make sure there are no null parameters.
    for (int i = 0; i < e.ParameterValues.Count; i++)
    {
        if (e.ParameterValues[i] == null)
        {
            switch (((System.Web.UI.WebControls.SqlDataSourceView)sender).FilterParameters[i].Type)
            {
                case TypeCode.Int16:
                case TypeCode.Int32:
                case TypeCode.Int64:
                    e.ParameterValues[i] = -1;
                    break;
                case TypeCode.Byte:
                    e.ParameterValues[i] = 0;
                    break;
                case TypeCode.Char:
                case TypeCode.String:
                    e.ParameterValues[i] = string.Empty;
                    break;
                case TypeCode.DateTime:
                    e.ParameterValues[i] = new DateTime();
                    break;
            }
        }
    }
}