Datalist.DataSource 问题
Datalist.DataSource issue
我有 1 个 DataList
和 2 个 SqlDataSource
我最初将 DataList1 设置为与 SqlDataSource1
配对
我有一个按钮可以将 DataSource
更改为 SqlDataSource2
DataList1.DataSource = SqlDataSource2;
DataList1.DataBind();
但是这样做会抛出一个错误
System.InvalidOperationException: 'Both DataSource and DataSourceID
are defined on 'DataList1'. Remove one definition.'
有什么想法吗?有没有办法重置数据源?
我的html
<form id="form1" runat="server">
<div>
</div>
<asp:DataList ID="DataList1" runat="server" DataKeyField="ID" DataSourceID="SqlDataSource1" RepeatColumns="3" RepeatDirection="Horizontal">
<ItemTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("Image") %>' Width="300px" />
<br />
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
<br />
</ItemTemplate>
</asp:DataList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT * FROM [items]"></asp:SqlDataSource>
<br />
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT * FROM [items] WHERE ([Name] = ?)">
<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" Name="Name" PropertyName="Text" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
从错误中,你需要将DataSource
或DataSourceID
定义为DataList
,而不是像DataList
HTML中那样同时定义两者DataSourceID
被定义,一旦你将定义另一个数据DataSource
,你需要清除它。
DataList1.DataSourceID = null;
DataList1.DataSource = SqlDataSource1;
DataList1.DataBind();
或从 DataList
HTML 中删除 DataSourceID="SqlDataSource1"
并在页面加载中定义 DataSource
然后您可以将 DataList1.DataSource
设置为需要 DataSource
直接。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataList1.DataSource = SqlDataSource2;
DataList1.DataBind();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
DataList1.DataSource = SqlDataSource1;
DataList1.DataBind();
}
我有 1 个 DataList
和 2 个 SqlDataSource
我最初将 DataList1 设置为与 SqlDataSource1
我有一个按钮可以将 DataSource
更改为 SqlDataSource2
DataList1.DataSource = SqlDataSource2;
DataList1.DataBind();
但是这样做会抛出一个错误
System.InvalidOperationException: 'Both DataSource and DataSourceID are defined on 'DataList1'. Remove one definition.'
有什么想法吗?有没有办法重置数据源?
我的html
<form id="form1" runat="server">
<div>
</div>
<asp:DataList ID="DataList1" runat="server" DataKeyField="ID" DataSourceID="SqlDataSource1" RepeatColumns="3" RepeatDirection="Horizontal">
<ItemTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("Image") %>' Width="300px" />
<br />
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
<br />
</ItemTemplate>
</asp:DataList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT * FROM [items]"></asp:SqlDataSource>
<br />
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT * FROM [items] WHERE ([Name] = ?)">
<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" Name="Name" PropertyName="Text" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
从错误中,你需要将DataSource
或DataSourceID
定义为DataList
,而不是像DataList
HTML中那样同时定义两者DataSourceID
被定义,一旦你将定义另一个数据DataSource
,你需要清除它。
DataList1.DataSourceID = null;
DataList1.DataSource = SqlDataSource1;
DataList1.DataBind();
或从 DataList
HTML 中删除 DataSourceID="SqlDataSource1"
并在页面加载中定义 DataSource
然后您可以将 DataList1.DataSource
设置为需要 DataSource
直接。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataList1.DataSource = SqlDataSource2;
DataList1.DataBind();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
DataList1.DataSource = SqlDataSource1;
DataList1.DataBind();
}