我是c#asp.net的新手。如何在Gridview中搜索数据?页面加载中的我的Gridview具有数据库中的所有记录。我一直在搜索它,大多数只是用空的GridView搜索。所以,是的,我的不是空的。 错误:DataSource和DataSourceID都在'GridView1'上定义。删除一个定义。
String str = "select * from tblEmployee where (Name like '%' + @search + '%')";
SqlCommand xp = new SqlCommand(str, objsqlconn);
xp.Parameters.Add("@search", SqlDbType.NVarChar).Value = TextBox1.Text;
objsqlconn.Open();
xp.ExecuteNonQuery();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = xp;
DataSet ds = new DataSet();
da.Fill(ds, "Name");
GridView1.DataSource = ds;
GridView1.DataBind();
objsqlconn.Close();
答案 0 :(得分:1)
您无法从网格中获取数据进行搜索,您需要将数据存储在某些搜索位置。那就是在每次搜索时存储在ViewState,Session或调用DataBase中。 Bellow代码显示存储在ViewState中的数据,您可以通过使用GridViewData随时访问您的数据,您可以在其中进行搜索。 (如果您有非常大量的数据,则首选项是在每次搜索时从数据库调用数据。)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.DataSource = GridViewData;
GridView1.DataBind();
}
}
public DataSet GridViewData
{
get
{
if (ViewState["GridViewData"] == null)
{
String str = "select * from tblEmployee where (Name like '%' + @search + '%')";
SqlCommand xp = new SqlCommand(str, objsqlconn);
xp.Parameters.Add("@search", SqlDbType.NVarChar).Value = TextBox1.Text;
objsqlconn.Open();
xp.ExecuteNonQuery();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = xp;
DataSet ds = new DataSet();
da.Fill(ds, "Name");
objsqlconn.Close();
ViewState["GridViewData"] = ds;
}
return (DataSet)ViewState["GridViewData"];
}
}
答案 1 :(得分:1)
@Fel ...我认为您尝试使用设计方面的sqldatasource以及代码背后的数据将数据绑定到数据网格
1)您需要选择一种绑定网格的方法 2)如果您在设计方面绑定,请从网格视图设计中删除DataSourceID属性。 像这样使用
asp:gridview id="grdData" runat="server"
而不是
asp:gridview id="grdData" runat="server" DataSourceID="Datasource1"
答案 2 :(得分:0)
请尝试此代码。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ProjectDemo_Asp.et.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Search GridView Record on Button Click By Using C#.Net in Asp.Net</title>
</head>
<body>
<form id="form1" runat="server">
Search By Title : <asp:TextBox ID="txtsearch" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click"
Text="Search" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" EmptyDataText="There are no data records to display."
Width="500px" BorderStyle="Solid" ShowFooter="True">
<Columns>
<asp:BoundField DataField="author_name" HeaderText="NAME" />
<asp:BoundField DataField="publisher_name" HeaderText="PUB. NAME" />
<asp:BoundField DataField="title" HeaderText="TITLE" />
<asp:BoundField DataField="publication_year" HeaderText="PUB. YEAR" />
</Columns>
<HeaderStyle BackColor="#66CCFF" />
</asp:GridView>
</form>
</body>
</html>
现在只需查看.cs页面上的代码。
using System;
using System.Data;
using System.Data.OleDb;
namespace ProjectDemo_Asp.et
{
public partial class Default : System.Web.UI.Page
{
public string connectionstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\bookstore.mdb;Persist Security Info=False;";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable _objdt = new DataTable();
_objdt = GetDataFromDataBase("");
if (_objdt.Rows.Count > 0)
{
GridView1.DataSource = _objdt;
GridView1.DataBind();
}
}
}
///
/// Function for binding retribing the data from database
/// In this i have used Access DB you can use SQL DB to bind the data
///
public DataTable GetDataFromDataBase(string searchtext)
{
DataTable _objdt = new DataTable();
string querystring = "";
querystring = "select * from Books";
if (querystring != "")
{
querystring += " where title like '%" + txtsearch.Text + "%';";
}
OleDbConnection _objcon = new OleDbConnection(connectionstring);
OleDbDataAdapter _objda = new OleDbDataAdapter(querystring, _objcon);
_objcon.Open();
_objda.Fill(_objdt);
return _objdt;
}
protected void Button1_Click(object sender, EventArgs e)
{
DataTable _objdt = new DataTable();
_objdt = GetDataFromDataBase(txtsearch.Text);
if (_objdt.Rows.Count > 0)
{
GridView1.DataSource = _objdt;
GridView1.DataBind();
}
}
}
}