要使用一个GridView / SqlDataSource进行相同的查询但使用不同的ConnectionStrings?还是每个ConnectionString有多个?

时间:2019-05-03 18:59:27

标签: c# asp.net gridview sqldatasource

我对ASP.NET和C#完全陌生。 我想在GridView中显示许多数据库之一的信息。在所有情况下查询都是相同的,但是基于DropDownList选择了ConnectionString。

我想知道在这种情况下最好的做法是什么?

  • 我是否为每个ConnectionString创建多个SqlDataSources / GridView,并根据DropDownList选择更改要显示或隐藏的那个?

  • 还是只创建一个SqlDataSource / GridView并根据DropDownList选择以编程方式更改ConnectionString?

我尝试了第一种方法,它可以正常工作,但是由于很多时候大多数未使用GridView,所以代码看起来很混乱。 而且当我尝试第二种方法时,它进行得并不顺利,因为当我尝试以编程方式更改GridView的数据源以刷新它时,不断出现以下错误:

  
    

System.InvalidOperationException:DataSource和DataSourceID都在“ GridViewCustomers”上定义。删除一个定义。

  

我使用以下代码以编程方式更改SqlDataSource的ConnectionString和GridView的DataSource以刷新它(每次单击搜索按钮时,该代码都会检查DropDownList并尝试相应地更改连接):


switch (DropDownList1.SelectedValue.ToString())
            {
                case "30":
                    SqlDataSourceCustomers.ConnectionString = ConfigurationManager.ConnectionStrings["DTconnection"].ConnectionString;
                    SqlDataSourceCustomers.SelectCommand = "DisplayCustomer";
                    SqlDataSourceCustomers.SelectCommandType = System.Web.UI.WebControls.SqlDataSourceCommandType.StoredProcedure;
                    SqlDataSourceCustomers.DataBind();
                    GridViewCustomers.DataSource = SqlDataSourceCustomers;
                    GridViewCustomers.DataBind();
                    GridViewCustomers.Visible = true;
                    break;


                case "20":
                    SqlDataSourceCustomers.ConnectionString= ConfigurationManager.ConnectionStrings["DWahconnection"].ConnectionString;
                    SqlDataSourceCustomers.SelectCommand = "DisplayCustomer";
                    SqlDataSourceCustomers.SelectCommandType = System.Web.UI.WebControls.SqlDataSourceCommandType.StoredProcedure;
                    SqlDataSourceCustomers.DataBind();
                    GridViewCustomers.DataSource = SqlDataSourceCustomers;
                    GridViewCustomers.Visible = true;
                    break;

                default:
                    GridViewCustomers.Visible = false;          
                    break;
            }

0 个答案:

没有答案