PDA

View Full Version : نمایش نتایج جستجو در GridView



dina123
شنبه 24 مهر 1389, 09:02 صبح
توی پروژه ای که دارم می نویسم، یه جستجو دارم که سه تا فیلد از یک جدول رو جستجو می کنه که می خوام نتیجه جستجو رو بعد از کلیک روی دکمه ی جستجو، توی GridView نمایش بده ولی هرکاری می کنم نمی دونم چطوری باید نتیجه ی Select رو بفرستم توی GridView ؟؟؟
خود GridView که از طریق Request.query نتیجه رو می گیره اما نمی دونم چطوری باید بفرستم تو GridView که بشه نمایش داد.

ممنون میشم اگه دوستان راهنماییم کنن.

behiunforgiven
شنبه 24 مهر 1389, 09:53 صبح
دوست عزیز می تونی یه دیتاتیبل Datatable درست کنی و اطلاعاتت رو بریزی توی این Datatable بعدش Gridview رو به این Datatable باید Bind کنی.

dina123
شنبه 24 مهر 1389, 12:21 عصر
سوال من هم دقیقاً همینه. چطوری به Gridview این دیتاتیبل رو بایند کنم؟
کُد من اینه:


Dim mydataadapter As SqlDataAdapter
Dim mydataset As New Dataset
Dim sqlstr As String ="select * from Issue Name like '%Txt_Name.Text%' OR Topic like '%Txt_Topic.Text%'" p
cn.open()d
mydataadapter = New SqlDataAdapter(sqlste,cn)
mydataadapter .Fill(mydataset ,"tb")
حالا اینجا چی بنویسم که به گریدویو بایند بشه و نتیجه جستجو رو تو گریدورو نمایش بده؟
cn.close()s

karim orooji
شنبه 24 مهر 1389, 12:31 عصر
سلام دوست عزیز
برای این کار بهتره از عملگر like که به شما امکان جستجو مانند موتور ها جستجو گر را میدهد
شکل دستوری این عملگر




"select * from اسم جدول where اسم فیلد like '" + TextBox1.Text + "%' "



textbox1 هم مقدار ورودی که جستجو بر اساس اون صورت میگیره
------------------------------------------------------------
زمانی که شما برنامه رو اجرا کرده ابتدا کل محتویات بانک رو برای شما نمایش میدهد در گرید ویو
در تکس باکسی که در برنامه تعبیه شده است متن ورودی جستجو میباشد
بر فرض مثال اگر حرف م رو بزنید تمام کلماتی که با حرف م شروع باشد برا برای شما نمایش میدهد
نمونه مثال هایی از این عملگر

like ' ali %'

جستجو براساس کلماتی که درش علی وجود دارد رو نمایش میده و علامت % علامت جانشین است

'%[م ه]%'

جستجو براساس در اون رکورد هر چی کلمه براساس م و ه وجود داشته چه اول کلمه و چه وسط و چه اخر کلمه وجود داشته باشد رو برای ما نمایش میدهد
نکته جستجو زمانی که کلمات بین کروشه [] باشد
جستجو در بین کلمات اون فلید رو هم انجام میگیرد

hamid_shrk
شنبه 24 مهر 1389, 14:31 عصر
سلام من این کار رو با C# کار کردم :


gridview1.datasource=ds.Tables["YourTable"].DefaultView;
gridview1.databind()

dina123
یک شنبه 25 مهر 1389, 10:11 صبح
با توجه به راهنمایی دوستان کدهایی که نوشته بودم رو تغییر دادم ولی اصلا نتیجه رو نمایش نمی ده. :افسرده:
کدهایی که نوشتم اینا هستن:


Dim sqlstr As String = "select * from Issue where Name like '% + Txt_Name.Text + %' OR Topic like '% + Txt_Topic.Text + %' OR Iss_City like '% + Txt_Place.Text + %' "
cn.Open()
mydataadapter = New SqlDataAdapter(sqlstr, cn)
mydataset.Clear()
mydataadapter.Fill(mydataset, "tb")
GridView1.DataSource = mydataset
GridView1.DataBind()
cn.Close()d

حالا چیکار باید بکنم؟

hamid_shrk
یک شنبه 25 مهر 1389, 10:21 صبح
به جای
GridView1.DataSource = mydataset
بنویس


GridView1.DataSource = mydataset.tables[نام جدول]
رو وارد کنید ببینید چجوری میشه

tazaree
یک شنبه 25 مهر 1389, 10:50 صبح
سلام
ببین من صفر تا صد کار رو خودم انجام می دهم. یکبار یک کلاس تعریف می کنم جان خودم رو راحت می کنم.
این تابع داده ها رو داخل gridview نمایش می ده البته با سی شارپ



private void grid_initialize()
{
GridView1.Columns.Clear();
DataTable dt = new DataTable();

DataColumn dc_no = new DataColumn("dc_no", typeof(System.Int16));
DataColumn dc_date = new DataColumn("dc_date", typeof(System.String));
DataColumn dc_monasebat = new DataColumn("dc_monasebat", typeof(System.String));
DataColumn dc_formal_rest = new DataColumn("dc_formal_rest", typeof(System.String));
DataColumn dc_company_rest = new DataColumn("dc_company_rest", typeof(System.String));


dt.Columns.Add(dc_no );
dt.Columns.Add(dc_date);
dt.Columns.Add(dc_monasebat);
dt.Columns.Add(dc_formal_rest);
dt.Columns.Add(dc_company_rest);

//*************************** fetch data from database

int size = data.GetScalar("select count(*) from dbo.sys_calender");


string[,] table = new string[size, 7];

string query = "select * from dbo.sys_calender";

int result = data.GetRows(query, table);

//************************************ make rows and add to data table
for (int i = 0; i < size; i++)
{
DataRow dr = dt.NewRow();
dr["dc_no"] = (i+1).ToString();
dr["dc_date"] = table [i,0] + "/"+ table [i, 1]+"/"+table[i,2];
dr["dc_monasebat"] = table [i, 5];
if (table[i, 3] == "1")
dr["dc_formal_rest"] = "بلی";
else
dr["dc_formal_rest"] = "خیر";

if (table[i, 6] == "1")
dr["dc_company_rest"] = "بلی";
else
dr["dc_company_rest"] = "خیر";
dt.Rows.Add(dr);
}
//***********************************
string[] header = { "ردیف", "تاریخ", "مناسبت", "تعطیل رسمی","تعطیلی شرکت" };
//string[] header = { "ردیف", "تاریخ", "مناسبت" , "" };
int k = 0;
foreach (DataColumn col in dt.Columns)
{
BoundField bfield;

{
bfield = new BoundField();

bfield.DataField = col.ColumnName;
bfield.HeaderText = header[k++];
GridView1.Columns.Add(bfield);
}


}//foreach

GridView1.DataSource = dt;
GridView1.DataBind();




}//gridinitialize

pedram_ns
یک شنبه 25 مهر 1389, 10:58 صبح
این مقدار tb چیه؟


mydataadapter.Fill(mydataset, "tb")

باید نام جدول مورد نظر در دیتابیس رو بنویسید.


mydataadapter.Fill(mydataset, "issue")

dina123
یک شنبه 25 مهر 1389, 11:33 صبح
این مقدار tb چیه؟


mydataadapter.Fill(mydataset, "tb")باید نام جدول مورد نظر در دیتابیس رو بنویسید.


mydataadapter.Fill(mydataset, "issue")

این تغییر رو هم اعمال کردم بازم جواب نداد.
----------
tazaree (http://www.barnamenevis.org/forum/member.php?u=10819) عزیز کدهای شما #C هست ولی من با VB کد می نویسم.

leila_mahyanet
یک شنبه 25 مهر 1389, 12:20 عصر
مشکل در query شماست :


Dim sqlstr As String = "select * from Issue where Name like N'%" + Txt_Name.Text + "%' OR Topic like N'%" + Txt_Topic.Text + %"' OR Iss_City like N'%" + Txt_Place.Text + "%' "
mydataadapter = New SqlDataAdapter(sqlstr, cn)
mydataset.Clear()
mydataadapter.Fill(mydataset, "tb")
GridView1.DataSource = mydataset.Tabels["tb"]
GridView1.DataBind()


وجود N برای جستجوهای فارسی می باشد. اگر فیلدهای مورد جستجو مقادیر فارسی ندارند N را بردارید.

dina123
یک شنبه 25 مهر 1389, 18:44 عصر
صفحه ای که خودم نوشتم رو می ذارم دوستان زحمتشو بکشن دانلود کنن و نگاه کنن ببینن مشکلش چیه که هر تغییری می دم کار نمی کنه.

http://www.4shared.com/file/BRF9C3lX/Search.html


بسیار سپاس گزارم

pedram_ns
یک شنبه 25 مهر 1389, 21:15 عصر
اولا این اطلاعاتی که گذاشتید تحت یک مسترپیج کار می کنه دوما بانک اطلاعاتی تون رو هم باید می ذاشتید
من یک نمونه گذاشتم که البته با اکسس کار می کنه خودتون تغییرات لازم رو انجام بدید.


Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|database.mdb")
Dim selectsql As String = "SELECT * from company where (company like '%' + @company + '%') or (managment like '%' + @managment + '%')"
Dim cmd As New OleDbCommand(selectsql, con)
cmd.Parameters.AddWithValue("company", company.Text)
cmd.Parameters.AddWithValue("managment", managment.Text)
con.Open()
Dim adapter As New OleDbDataAdapter(cmd)
Dim ds As New DataSet()

adapter.Fill(ds, "company")

GridView1.DataSource = ds
GridView1.DataBind()
con.Close()

این نمونه از جدول company اطلاعات رو می گیره. اطلاعات بر اسا دو فیلد company , managment گرفته می شه تکس باکس ها هم به همین نام است.

dina123
سه شنبه 27 مهر 1389, 08:47 صبح
توی این یکی دیتابیس هم گذاشتم، تحت مسترپیج هم نیست. اگه ممکنه کدهای خودمو بررسی کنید تا ببینم مشکل کجاست که هرکاری می کنم جواب نمی ده. چون هرچی دوستان راهنمایی کردن روی کدها اعمال کردم ولی باز هم نتیجه نگرفتم.

http://www.4shared.com/file/3_JhHwDI/Search.html

pedram_ns
سه شنبه 27 مهر 1389, 09:55 صبح
خوب مشخصه که جواب نمی ده چون گریدویو شما خالیه.
شما اطلاعات دیتابیس رو در گرید می ریزید ولی در گرید مشخص نکردید چه مواردی باید نمایش داده بشه چیزی مثل این رو باید بنویسید.


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="name" HeaderText="name"
SortExpression="name" />
<asp:BoundField DataField="topic" HeaderText="topic"
SortExpression="topic" />
<asp:BoundField DataField="Iss_City" HeaderText="Iss_City" SortExpression="Iss_City" />
</Columns>
</asp:GridView>

dina123
سه شنبه 27 مهر 1389, 12:53 عصر
از همه دوستانی که راهنماییم کردن سپاس گزارم. مشکلم حل شد. برای اینکه اگر شخص دیگه ای مشکل من رو داشت بتونه استفاده کنه کد خودم رو اینجا می ذارم.


Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim mydataadapter As SqlDataAdapter
Dim mydataset As New DataSet
Dim key As Boolean
key = False
Dim sqlstr As String = "select Issuance,Name,Topic,Redacter,Iss_City,WebSite from Issue where "
If Txt_Name.Text <> "" Then
sqlstr = sqlstr + "Name like N'%" + Txt_Name.Text + "%'"
key = True
End If
If Txt_Topic.Text <> "" Then
If key = True Then
sqlstr = sqlstr + " and "
End If
sqlstr = sqlstr + " Topic like N'%" + Txt_Topic.Text + "%'"
key = True
End If
If Txt_Place.Text <> "" Then
If key = True Then
sqlstr = sqlstr + " and "
End If
sqlstr = sqlstr + " Iss_City like N'%" + Txt_Place.Text + "%'"
End If
Response.Write(sqlstr)
cn.Open()
mydataadapter = New SqlDataAdapter(sqlstr, cn)
mydataset.Clear()
mydataadapter.Fill(mydataset, "Issue")
GridView1.DataSource = mydataset
GridView1.DataBind()
cn.Close()
End Sub

raziee
سه شنبه 27 مهر 1389, 14:31 عصر
صفحه ای که خودم نوشتم رو می ذارم دوستان زحمتشو بکشن دانلود کنن و نگاه کنن ببینن مشکلش چیه که هر تغییری می دم کار نمی کنه.
http://www.4shared.com/file/BRF9C3lX/Search.html

بسیار سپاس گزارم
فایلی برای دانلود وجود نداره!

The file link that you requested is not valid.


Dim sqlstr As String ="select * from Issue Name like '%Txt_Name.Text%' OR Topic like '%Txt_Topic.Text%'" p
به این روش کار نکنید. امنیت پایین هست. متغیر ها رو به صورت پارامتر ارسال کنید.

pedram_ns
سه شنبه 27 مهر 1389, 16:24 عصر
بله همونطور که دوستمون گفتن به این صورت ننویسید مقدار تکس باکس رو به یک متغیر بدید و از اون در رشته اتصال استفاده کنید


dim name as string=Txt_Name.Text

در ضمن لازم نیست برای جلوگیری از جستجو تکس باکس خالی به این صورت شرط بگذارید کافی تعیین کنید اگر هر یک از تکس باکس ها خالی بود مقدار اون رو مثلا برابر nodata بذاره(یا هر مقدار دیگه ایی که در اون فیلد موجود نباشه) که در این صورت با این مقدار چیزی پیدا نخواهد کرد.


dim name as string=Txt_Name.Text
if name="" then
name="nodata"
end if

raziee
سه شنبه 27 مهر 1389, 17:09 عصر
بله همونطور که دوستمون گفتن به این صورت ننویسید مقدار تکس باکس رو به یک متغیر بدید و از اون در رشته اتصال استفاده کنید



dim name as string=Txt_Name.Text


اگه منظورتون صحبت بنده هست:

به این روش کار نکنید. امنیت پایین هست. متغیر ها رو به صورت پارامتر ارسال کنید.
من چیز دیگه ای رو گفتم.
ارسال اطلاعات به SQL Server به صورت پارامتر، نه چیزی که شما فرمودید.
کاری که شما میگید چه برتری از نظر امنیت نسبت به روشی که خودشون کار میکردند داره؟