PDA

View Full Version : جستجو بر اساس اون چیزی که در combo box انتخاب کردیم



aknj56
سه شنبه 23 اسفند 1390, 14:34 عصر
با سلام و خسته نباشید خدمت دوستان
من میخوام فیلدهایی رو که در combobox هست و کاربر یکی از اونها رو انتخاب کرده مثلا موضوع نامه را انتخاب کرده سپس بر اساس اون یک موضوعی رو در textbox وارد میکنه رو در gridview نشون بده
لطفا راهنمایی کنیدhttp:// (http://[url=http//www.pic1.iran-forum.ir/%5D%5BIMG%5Dhttp://www.pic1.iran-forum.ir/images/up2/98296131706767666784.gif%5B/IMG%5D%5B/URL%5D)http://www.pic1.iran-forum.ir/images/up2/98296131706767666784.gif (http://www.pic1.iran-forum.ir/)

monirprogram
سه شنبه 23 اسفند 1390, 15:04 عصر
dim a as integer=cmb1.selectedvalue
dim str="select * from tbltest where "+a.tostring+"="+txttest.text

البته من این دستور رو با این پیش فرض نوشتم که شما مقدار value رو داخل دیتابیس ذخیره میکنی نه متن کمبوباکس رو. اگر متن بود کافیه جای cmbtest.selectedvalue بنویسی cmbtest.text و همینطور.........................

Hybrid
سه شنبه 23 اسفند 1390, 15:35 عصر
سلام دوست عزیز ، امیدوارم حالت خوب باشه ،

شما برای جستجو نیاز به یک تابع دارین که دو پارامتر داره ، یکی نام فیلدی که شما میخواین بر اساسه اون فیلد جستجو انجام بشه ، و یکی دیگه متن مورد نظر که برنامه باید داخل بان جستجوش کنه ، تابعتون باید چیزی شبیه تابع زیر باشه :


Function Search(ByVal FieldName As String, ByVal SearchFor As String) As DataTable
Dim oledbDataAdapter1 As New OleDbDataAdapter
With oledbDataAdapter1
.SelectCommand = New OleDbCommand
.SelectCommand.Connection = oledbConnection1
.SelectCommand.CommandType = CommandType.Text
.SelectCommand.CommandText = "Select * from person Where " & FieldName & " like '%" & SearchFor & "%' order by Person_ShAks"
If .SelectCommand.Connection.State <> ConnectionState.Open Then
.SelectCommand.Connection.Open()
End If
.SelectCommand.ExecuteNonQuery()
Dim ds As New MyDs
oledbDataAdapter1.Fill(ds, "Person")
Return ds.Person
End With
End Function

توضیح : در این تابع که براتون نوشتم اگه دقت کنین 2 پارامتر میگیره :

1 ) Field Name : این پارامتر نام فیلد موجود در بانک که میخواین جستجو بر اساسه اون انجام بشه ،

2 ) Search For : این پارامتر متن جستجو هست.

الان شما با یک if ساده میتونین به برنامه بگین که اگه کاربر مثلا گزینه ی اول از کامبو رو انتخاب کنه شما بیا بر اساسه فیلد name جستجو رو انجام بده و اگه گزینه ی 2 از کامبو رو انتخاب کرد بیا بر اساسه familyname جستجو رو انجام بده و....

امیدوارم توضیحاتم رو گرفته باشین. اگه نیاز به توضیح اضافی یا نمونه کدی داشتین در خدمتم.

موفق باشید./

aknj56
سه شنبه 23 اسفند 1390, 16:03 عصر
دوست عزیز میخام اون کد ها ور که نوشتم برای نمایش بذارم باید چی کار کنم مثل اون کدهایی که شما نوشتید و به هم نمی خوره نشون بده
دوما این کدهای که شما نوشتید رو باید کجا بنویسم منظورم همین تابع که دو پارامتر داره من کدهام رو توی چنچ تکس نوشتم نمی دونم منظورم رسوندم

Hybrid
سه شنبه 23 اسفند 1390, 16:12 عصر
دوما این کدهای که شما نوشتید رو باید کجا بنویسم منظورم همین تابع که دو پارامتر داره من کدهام رو توی چنچ تکس نوشتم نمی دونم منظورم رسوندم این تابع رو میتونین داخل یک ماژول ، داخل کلاس فرم ، و حتی داخل کلاس هایی که خودتون داخل برنامه تعریف کردین بنویسید ،

درمورد سوال اولتون باید کدهاتون رو داخل تگ های Code قرار بدین ( به شکل # هست).

Hybrid
سه شنبه 23 اسفند 1390, 16:33 عصر
یک مثال واستون نوشتم امیدوارم کارت راه بیوفته :

aknj56
سه شنبه 23 اسفند 1390, 21:28 عصر
دوست عزیز به Return ds.Table1 گیر میده


Public Class serch
Function Search(ByVal FieldName As String, ByVal SearchFor As String) As DataTable
Dim oledbDataAdapter1 As New OleDbDataAdapter
Dim cnn As New OleDbConnection
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\dabirkhaneh.accdb"
With oledbDataAdapter1
.SelectCommand = New OleDbCommand
.SelectCommand.Connection = cnn
.SelectCommand.CommandType = CommandType.Text
.SelectCommand.CommandText = "Select * from sabt Where " & FieldName & " like '%" & SearchFor & "%'"
If .SelectCommand.Connection.State <> ConnectionState.Open Then
.SelectCommand.Connection.Open()
End If
.SelectCommand.ExecuteNonQuery()
Dim ds As New DataSet
oledbDataAdapter1.Fill(ds, "Table1")
Return ds.Table1
cnn.Close()
End With
End Function

فرید نجفلو
سه شنبه 23 اسفند 1390, 22:28 عصر
شما ds رو از DataTable تعریف کنید
تو خط Fill پارامتر دوم حذف کنید
تو خط return همون ds رو برگردونید

البته با همین کد می تونید تو خط Return مقدار برگشتی رو به این صورت بنویسید
Return ds.Tables("Table1")

Hybrid
چهارشنبه 24 اسفند 1390, 00:15 صبح
دوست عزیز به Return ds.Table1 گیر میدهاین Ds که میبینین . table1 به ترتیب اسم dataset و table موجود در بانک منه و شما باید باید ds رو به نام dataset موجود در برنامه خودتون و table1 رو به نام جدول موجود در بانکتون تغییر بدین.راه دیگش اینه که از کد زیر استفاده کنین :


Function Search(ByVal FieldName As String, ByVal SearchFor As String) As DataTable
Dim oledbDataAdapter1 As New OleDbDataAdapter
Dim cnn As New OleDbConnection
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\dabirkhaneh.accdb"
With oledbDataAdapter1
.SelectCommand = New OleDbCommand
.SelectCommand.Connection = cnn
.SelectCommand.CommandType = CommandType.Text
.SelectCommand.CommandText = "Select * from sabt Where " & FieldName & " like '%" & SearchFor & "%'"
If .SelectCommand.Connection.State <> ConnectionState.Open Then
.SelectCommand.Connection.Open()
End If
.SelectCommand.ExecuteNonQuery()
Dim dt As New DataTable
oledbDataAdapter1.Fill(dt)
Return dt
cnn.Close()
End With
End Function

همون کد بالاس ولی دیتاست رو حذف کردم و به جاش datatable رو گذاشتم.

aknj56
چهارشنبه 24 اسفند 1390, 07:25 صبح
سلام دوست عزیز بعد از اجرای برنامه این ارور رو میده
من اون موارد داخل کمبو باکس رو به فارسی توی اون ifها داخل کوتیشن گذاشتم فکر نکنم مشکل از اونا که نیست

84147

Hybrid
چهارشنبه 24 اسفند 1390, 11:29 صبح
نه دیگه عزیز ،

شما باید به جای fieldname نام فیلد اصلی موجود در بانک رو بنویسید ، مثلا این فیلد خطاب نامه داخل بانک مثلا نامی به صورت Khatabname داره ، اونو بنویس.

http://img4up.com/up2/08341697548692673766.jpg

توضیح : مثلا فرض کن آیتم اول از کامبو شما اسمش خطاب نامه هست کدتون باید چیزی شبیه کد زیر باشه :


If ComboBox1.SelectedIndex = 0 Then
DataGridView1.DataSource = Search("khatabname", TextBox1.Text)
End If

khatabname مثلا نام اصلی موجود در بانک شماست.

فرید نجفلو
چهارشنبه 24 اسفند 1390, 11:40 صبح
من با نام فیلد کاری ندارم ولی شما باید اونو داخل [] محصور کنید:
مثل:
"Select * From sabt Where [" & FieldName & "] Like '%" & SearchFor & "%'"

aknj56
چهارشنبه 24 اسفند 1390, 13:15 عصر
با تشکر ازشما دوست عزیز مشکل حل شد و کاملا سرچ میکنه
ضمنا قبلا یک سئوال از شما پرسیدم که مثلا وقتی نامه ارسالی رو میخایم سرچ کنیم دیگه اون فیلدهایی که مربوط به نامه وارده است مثل تاریخ ورود یا شماره نامه وارده دیگه توش نباشه در این زمنیه هم اگر میشه راهنمایی کنید
ویک سئوال دیگه ما در کمبو باکس دوم فیلدهای مختلفی داریم مثلا تاریخ نامه حالا این تاریخ نامه رو که توی اون if قرار میدیم فقط باید یا تاریخ صادره را بذاریم یا وارده رو آیا میشه کاری کرد که هر دو فیلد رو قبول کنه مثلا وقتی یک تاریخ به اون میدیم همه تاریخها رو بیاره اعم از صارده و وارده رو بایک and یا چیز دیگری نمی شه؟
باتشکر