【问题标题】:How to connect a GridView to two different sqldatasources in C#如何在 C# 中将 GridView 连接到两个不同的 sqldatasource
【发布时间】:2014-09-15 06:31:44
【问题描述】:

我想知道如何将单个 GridView 连接到两个 SqlDataSource 对象?

目前我遇到一个错误,指出 DataSource 和 DataSourceID 都在“GridView1”上定义,因此我删除了一个定义。但我不想删除任何定义,因为两者都很重要。

Aspx 标记

SqlDataSource1

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConnectionString="<%$ ConnectionStrings:DBCS %>" 
                DeleteCommand="DELETE FROM [vendor_master] WHERE [vendorID] = @vendorID" 
                InsertCommand="INSERT INTO [vendor_master] ([Vname], [Email], [Mobile], [Landline], [Address], [Pincode]) VALUES (@Vname, @Email, @Mobile, @Landline, @Address, @Pincode)" 
                SelectCommand="SELECT * FROM [vendor_master]" 
                UpdateCommand="UPDATE [vendor_master] SET [Vname] = @Vname, [Email] = @Email, [Mobile] = @Mobile, [Landline] = @Landline, [Address] = @Address, [Pincode] = @Pincode WHERE [vendorID] = @vendorID">
                <DeleteParameters>
                    <asp:Parameter Name="vendorID" Type="Int32" />
                </DeleteParameters>
                <InsertParameters>
                    <asp:Parameter Name="Vname" Type="String" />
                    <asp:Parameter Name="Email" Type="String" />
                    <asp:Parameter Name="Mobile" Type="Int64" />
                    <asp:Parameter Name="Landline" Type="Int64" />
                    <asp:Parameter Name="Address" Type="String" />
                    <asp:Parameter Name="Pincode" Type="Int32" />
                </InsertParameters>
                <UpdateParameters>
                    <asp:Parameter Name="Vname" Type="String" />
                    <asp:Parameter Name="Email" Type="String" />
                    <asp:Parameter Name="Mobile" Type="Int64" />
                    <asp:Parameter Name="Landline" Type="Int64" />
                    <asp:Parameter Name="Address" Type="String" />
                    <asp:Parameter Name="Pincode" Type="Int32" />
                    <asp:Parameter Name="vendorID" Type="Int32" />
                </UpdateParameters>
            </asp:SqlDataSource>

SqlDataSource2

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
                ConnectionString="<%$ ConnectionStrings:DBCS %>" SelectCommand="FindVendor" 
                SelectCommandType="StoredProcedure">
                <SelectParameters>
                    <asp:ControlParameter ControlID="txtFindVendor" Name="name" PropertyName="Text" 
                        Type="String" />
                </SelectParameters>
            </asp:SqlDataSource>

C#代码

protected void btnAddVendor_Click(object sender, EventArgs e)
{
    if (IsValid)
    {
        SqlDataSource1.InsertParameters["Vname"].DefaultValue = txtName.Text;
        SqlDataSource1.InsertParameters["Email"].DefaultValue = txtEmail.Text;
        SqlDataSource1.InsertParameters["Mobile"].DefaultValue = txtMobile.Text;
        SqlDataSource1.InsertParameters["Landline"].DefaultValue = txtLandline.Text;
        SqlDataSource1.InsertParameters["Address"].DefaultValue = txtAddress.Text;
        SqlDataSource1.InsertParameters["Pincode"].DefaultValue = txtPincode.Text;

        SqlDataSource1.Insert();
    }
}

protected void btnFindName_Click(object sender, EventArgs e)
{
    GridView1.DataSource = SqlDataSource2;
    GridView1.DataBind();
}

【问题讨论】:

  • 为什么要更改数据源?

标签: c# asp.net gridview ado.net


【解决方案1】:

简单地处理每个点击事件,而不是 GridView1.DataSource = SqlDataSource2 更改 ...

protected void btnFindName_Click(object sender, EventArgs e)
    {
        GridView1.DataSourceID = "SqlDataSource2";
        GridView1.DataBind();
    }

【讨论】:

    【解决方案2】:

    你必须在一个 SQLDatasource 中加入 2 个表。像这样:

    SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
      FROM Orders
      INNER JOIN Customers
      ON Orders.CustomerID=Customers.CustomerID; 
    

    【讨论】:

      【解决方案3】:

      错误是Both DataSource and DataSourceID 是明确的。问题出在Gridview 的 html 中。

      删除DataSource 或DataSourceID 的属性之一。

      关于 SO 的类似问题

      1. Both DataSource and DataSourceID are defined on 'GridView1'. Remove one definition

      编辑 1

      或者您尝试使用设计端的sqldatasource 以及使用背后代码的c# 代码将数据绑定到数据网格..

      <asp:gridview  runat="server" autogeneratecolumns="False" 
           DataSourceID="Datasource1">
      

      这里指定了DataSourceID,并且在GridView1.DataSource = SqlDataSource2; 后面的代码中导致了问题。

      【讨论】:

        猜你喜欢
        • 2017-04-29
        • 1970-01-01
        • 2012-01-30
        • 1970-01-01
        • 2017-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-15
        相关资源
        最近更新 更多