我试图根据保管箱列表和搜索字词过滤我的GridView数据。
我的GridView当前使用SQLdatasource通过ASP服务器端绑定。
我正在尝试通过onclick_button事件中的C#过滤GridView。
以下是我的过滤代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
namespace ViewCDs
{
public partial class _Default : System.Web.UI.Page
{
protected void btnSearch_Click(object sender, EventArgs e)
{
string connstring = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Dave\Documents\cdsCollections.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection sqlcon = new SqlConnection(connstring);
string str = TextBox1.Text;
string str2 = DropDownList1.Text;
string set = "";
if (str2 == "Artist")
{
set = "artist";
}
if (str2 == "CD Title")
{
set = "cdTitle";
}
if (str2 == "Music Genre")
{
set = "genre";
}
SqlCommand sqlcmd = new SqlCommand("select * from cds where " + set + " like '%" + str + "%'", sqlcon);
SqlDataAdapter adp = new SqlDataAdapter(sqlcmd);
DataSet ds = new DataSet();
adp.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
}
}
}
}
如何在ASP方面触发事件:
<asp:Button ID="Button1" runat="server" Text="Search" onclick="btnSearch_Click" />
这是一个非常标准的布局,通配符查询的结果存储在数据集对象中,如果数据集的计数大于0,那么这应该绑定到我的GridView。但是这种绑定没有发生,我收到了这个错误:
Both DataSource and DataSourceID are defined on 'GridView1'. Remove one definition.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: Both DataSource and DataSourceID are defined on 'GridView1'. Remove one definition.
答案 0 :(得分:1)
如果没有看到你的aspx代码,你可能会像这样定义GridView1:
<asp:GridView runat="server" ID="GridView1" DataSourceID="SOME_DATA_SOURCE" >
注意DataSourceID
。如错误所述,您不能同时使用DataSourceID
和DataSource
。
解决方案是仅使用DataSource
将其设置为Page_Load
事件中的DataSourceID的选择查询。
换句话说,在没有DataSourceId的情况下定义GridView:
<asp:GridView runat="server" ID="GridView1" ... >
然后在后面的代码中:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataSet ds = // Get Data from DB
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
}
}
您遇到的另一个问题是 安全问题 - 您的代码容易出现 Sql Injections - 请确保 参数化 您的查询