Gridview错误,将过滤器添加到由存储过程填充的gridview

时间:2016-02-25 20:53:31

标签: c# asp.net .net

我有一个带有简单数据驱动gridview的.net webform:

 <asp:TextBox ID="txtCodeSearch" runat="server" Width="250px"></asp:TextBox>
      <br />
<asp:Button ID="btnCodeSearch" runat="server" Text="Search" CssClass="button-tiny" 
        onclick="btnCodeSearch_Click" />

<asp:Gridview id="gvTest" runat="server">
<Columns>
<asp:CommandField ShowEditButton="True" HeaderText="Action" />
 <asp:BoundField DataField="Field1" />
 <asp:BoundField DataField="Field2" />
 <asp:BoundField DataField="CodeID" HeaderText="" ReadOnly="true" Visible="false" /> 
</Columns>
</asp:Gridview> 

<asp:SqlDataSource ID="dsTest" runat="server" 
            ConnectionString="<%$ ConnectionStrings:SQLConn %>" 
            SelectCommand="SelectCodes" 
            SelectCommandType="StoredProcedure"
            >
            <SelectParameters>
               <asp:QueryStringParameter Name="FooID" QueryStringField="FooID" Type="String" />
            </SelectParameters>
        </asp:SqlDataSource>

1)在页面加载时,前端sqdatasource使用查询字符串中的变量填充gridview,FooID

2)当上面的文本框中填充了代码并按下按钮时,我在代码隐藏中运行以下内容:

 protected void btnCodeSearch_Click(object sender, EventArgs e)
        {

            string CodeName = string.Empty;
            CodeName = txtCodeSearch.Text;

            string FooID= string.Empty;
            FooID = Request.QueryString["FooID"];

            if (!string.IsNullOrEmpty(CodeName))
            {
                dsTest.SelectParameters.Clear();
                dsTest.SelectCommand = "SelectCodesWithFilter";
                dsTest.SelectParameters.Add("FooID", FooID);
                dsTest.SelectParameters.Add("CodeName", CodeName);
            }

            else
            {
                dsTest.SelectParameters.Clear();
                dsTest.SelectCommand = "SelectCodes";

            }

            gvTest.DataBind();
        }

简而言之,在存储过程中运行不同的select语句,以使用额外的过滤器填充gridview。如果文本框中没有任何内容,则将gridview填充到原始存储过程

这一切都很完美。问题是,gridview具有编辑功能。如果在从第一个存储过程(SelectCodes)填充网格时启用了编辑模式,则它可以正常工作。如果我向下过滤网格并且它由SECOND存储过程(SelectCodesWithFilter)填充并且我进入编辑模式,它告诉我我试图向FIRST存储过程添加太多参数。

我很难过,我无法弄清楚它为什么这样做。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

我还没试过,但我发现*这段代码要切换到另一个查询:

SqlDataSource1.SelectCommand = "SELECT x FROM MyTable";
SqlDataSource1.Select(DataSourceSelectArguments.Empty);
SqlDataSource1.DataBind();
GridView1.DataBind();

我注意到SqlDataSource上的DataBind()命令,在GridView上的命令之前。这会对你产生影响吗?

*来源:http://forums.asp.net/t/1535310.aspx?Changing+Select+Command+of+SQLDataSource+from+code+behind