在搜索按钮上...... DataSource和DataSourceID都在'GridView1'上定义。删除一个定义

时间:2015-02-20 03:11:17

标签: c# asp.net gridview

我的gridview1已与sqldatasource1相关联,现在我使用searchBOX.textsearch_button

创建搜索命令
var ds = new DataSet();

            using (var newconnection = new SqlConnection(ConfigurationManager.ConnectionStrings["User_DB_Connectionstring"].ConnectionString))
            {
                strconn = "select * from User_TBL_DB where (Firstname like '%@search%')";
                var xp = new SqlCommand(strconn, newconnection);
                xp.CommandType = CommandType.Text;
                xp.Parameters.AddWithValue("@search", SearchBOX.Text);

                newconnection.Open();

                xp.ExecuteNonQuery();
                var da = new SqlDataAdapter();
                da.SelectCommand = xp;
               da.Fill(ds, "Name");
            }

            GridView1.DataSource = ds;
            GridView1.DataBind();

我遇到问题GridView1.Datasource =ds;和我的datasourceID datasourceID="sqlDatasource1"它总是给我这个错误“”“DataSource和DataSourceID都是在'GridView1'上定义的。删除一个定义。”“< / p>

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Align="Center" 
    BackColor="#DEBA84" BorderColor="#DEBA84" BorderWidth="1px" 
    CellPadding="3" ShowFooter="True" 
    Width="713px" BorderStyle="None" CellSpacing="2" 
    onrowcommand="GridView1_RowCommand" DataSourceID="SqlDataSource1" 
    onrowdeleting="GridView1_RowDeleting1" AutoGenerateSelectButton="True" 
    onselectedindexchanged="GridView1_SelectedIndexChanged" 
    AllowPaging="True" >

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

在分配数据源之前,您可能会尝试将DataSourceID设置为null。

另一种方法是在PageLoad事件中以编程方式绑定数据,以便可以在标记中删除datasourceid

答案 1 :(得分:0)

此错误表示您将两个数据源附加到一个gridview。因此,您可以以编程方式或使用sqldatasource1设置gridview1的数据源。如果使用SqlDatasource填充数据,则更改sqldatasource中的select查询并使用参数化存储过程。像这样:

     CREATE PROCEDURE StoredProcedure
            /*
            (
            @parameter1 int = 5,
            @parameter2 datatype OUTPUT
            )
            */
        @search nvarchar(1000)
        AS
            /* SET NOCOUNT ON */
    BEGIN
        SET NOCOUNT ON
          /* Variable Declaration */
        Declare @sql_query nvarchar(4000)
        Declare @parameterDefination As Nvarchar(2000)
          /* Build the Transact-SQL String with the input parameters */ 
        Set @sql_query='select * from User_TBL_DB where (1=1) '
         /* check for the condition and build the WHERE clause accordingly */
        If Firstname <> '-1' 
         Set @sql_query = @sql_query + 'AND (Firstname like "%@search%")'
        /* Specify Parameter Format for all input parameters included 
             in the stmt */
        Set @parameterDefination = '@search nvarchar(1000)'
         /* Execute the Transact-SQL String with all parameter value's 
               Using sp_executesql Command */
        Execute sp_Executesql @sql_query, @parameterDefination, @search
        If @@ERROR <> 0 GoTo ErrorHandler
            Set NoCount OFF
            Return(0) 
        ErrorHandler:
            Return(@@ERROR)
    END

配置Sqldatasource1时,将@search的默认值分配给&#39; -1&#39;并在pageload上添加gridview1.databind()

删除sqldatasource1并使用您的代码搜索数据。

答案 2 :(得分:0)

从您的代码中可以清楚地看到,您正在为同一gridview使用两个数据源,其中一个是

  

GridView1.DataSource = ds;

另一个是

  

的DataSourceID =&#34; SqlDataSource1&#34;

只需删除&gt;的DataSourceID =&#34; SqlDataSource1&#34; ,因为你似乎以编程方式约束你的griview。