PDA

View Full Version : سرج در گرید ویو به وسیله 3 فیلد



angel farahani
چهارشنبه 06 فروردین 1393, 23:42 عصر
با سلام

دوستان من میخوام به وسیله سه فیلد نام و نام خانوادگی و ایمیل در لیست زیر آن که کل افراد را نشان می دهد سرچ کند و آن رکورد مربوطه را نشان بده.
من کاری کردم اینه که هر سه فیلد رو باید کامل و درست پر کنی تا رکورد رو پیدا کنه . در حالیکه من در دستور sql آن or هم گذاشتم و هم چنین میخوام لیست کامل افراد را در زیر نشان بده و بعد از سرچ یک رکورد را خروجی بده.
ممنون میشم راهنماییم کنید

imohsen
پنج شنبه 07 فروردین 1393, 08:38 صبح
اگه برات امکان داره سرچت رو روی خود رکوردهای بانکت انجام بده و برای رعایت تقدم و تاخر AND و OR بینشون پرانتز بذار
این کار رو با دستور SQL Select و یا بصورت ساده تر با LINQ می تونی انجام بدی
اما اگه می خوای روی رکوردهایی که از بانک اطلاعاتی بازیابی کردی بدون مراجعه مجدد به بانک سرچ انجام بدی باید اون رو توی یک DataTable ریخته باشی و بعد با استفاده از مثال زیر می تونی شرط روش اعمال کنی:


DataTable dt = Your DB Records;
DataRow[] result = dt.Select("Date > #6/1/2001#");
myGridview.Datasource = result.CopyToDataTable();
myGridview.DataBind();

angel farahani
پنج شنبه 07 فروردین 1393, 10:09 صبح
سلام ، سپاس از اینکه پاسخ دادین ، یعنی اگر بخوام لیست کل افراد هم در زیر فیلدهای جستجو باشه باید از datatable استفاده کنم ؟ و بعد امکان اینکه با سرچ یک رکورد را برگردونه وجود داره ؟ بازم سپاس

من در کد sql مربوط به گرید این رو نوشتم که چیزی رو بر نمی گردونه :

SELECT userid, userfname, userlname, email, address, phone, cellphone, registerdate, username, password, usertypeid, address2, shopid FROM users WHERE ([email] LIKE '%' + @email + '%') OR ([cellphone] LIKE '%' + @cellphone + '%')

imohsen
پنج شنبه 07 فروردین 1393, 21:06 عصر
منظورت رو درست متوجه نشدم اما با این متد میتونی نتیجه کوئریت رو بصورت datatable خروجی بگیری و به سادگی به گریدت نسبت بدی:

public static DataTable GetTableDataFromDB(string CMDText)
{
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrin gs["YourConnectionString"].ConnectionString);
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandType = CommandType.Text;
command.CommandText = CMDText;

connection.Open();
DataTable result = new DataTable();
result.Load(command.ExecuteReader());

connection.Close();
return result;
}




باید بذاری تو یه کلاس و بعد فراخونیش کنی
الزامی به datatable بودن نتیجه کوئری نیست اما این استاندارد تره
شما سلکت بالا رو بصورت استرینگ بذار جای CMDText

angel farahani
پنج شنبه 07 فروردین 1393, 21:42 عصر
ممنونم که وقت میزارید و جواب میدین ، اما میخوام از datatable استفاده نکنم ، بزارید منظورم رو بیشتر توضیح بدم ، میخوام لیست افراد را کامل نشان بدم و بعد با اعمال سرج کردن ، یک رکورد را از آن لیست افراد نشان بدم . با آیتم های شماره موبایل و ایمیل میخوام سرچ انجام شه .

imohsen
جمعه 08 فروردین 1393, 11:41 صبح
خوب بالاخره باید نتیجه که داری نشون میدی رو - لیست افراد- یک جا داشته باشی و بعد روی اون یه سرچ جدید بزنی که راهش همون پست اول بود. در این صورت اگه سرچت فقط شامل یک فرد بشه خوب همون یک رکورد رو بر میگردونه.
یا اینکه می تونی بجای اینکه روی نتیجه کوئری دوباره کوئری بزنی، روی بانکت کوئری بزنی و البته الزامی هم به استفاده از Datatable نیست

angel farahani
جمعه 08 فروردین 1393, 12:03 عصر
آره پس منظورم رو متوجه شدید ، لیست افراد را نشان بده و بعد روی آن یک سرچ را انجام بده و نتیجه رو برگردونه ، پس همون پست اول را که جواب دادین من انجام میدم ، اعلام نتیجه میکنم . ممنونم از شما

angel farahani
جمعه 08 فروردین 1393, 12:33 عصر
ببخشید من دو خط اول کدتون در پست اول را متوجه نمیشم ، من یک datatable آوردم ولی نمی دونم به جا این دو خط چی بنویسم ؟

117374

imohsen
شنبه 09 فروردین 1393, 11:36 صبح
نه این روش شما منظور من نیست
یک کلاس ایجاد کنید و اون کد را داخلش کپی کنید
سپس با مثال زیر می تویند استفاده کنید:

myGridView.Datasource = myClass.GetTableDataFromDB("select * from mytable");
myGridView.DataBind();


بعدش وقتی خواستی کوئری برای یک فرد خاص بزنی مجددا همین کاررو انجام بده فقط select رو تغییر بده و شروطت رو اعمال کن:

myGridView.Datasource = myClass.GetTableDataFromDB("select * from mytable where username = ??? AND userphone = ????");
myGridView.DataBind();

angel farahani
شنبه 09 فروردین 1393, 11:45 صبح
سپاس از شما ، انجام میدم و اعلام نتیجه میکنم .

angel farahani
شنبه 09 فروردین 1393, 13:15 عصر
من کدهای زیر را نوشتم ، لیست کاربران را کامل در گرید نشان می ده ، اما وقتی شماره موبایل یا ایمیل را در textbox میزنم تا سرچ کنه این خطا را می دهد . هم چنین لیست کامل افراد را که نشان می ده ، enable paging ان را فعال کردم ، اما فقط در همون صفحه 1 می مونه و به صفحات 2 و 3 نمیره .


private void GridData() {
String conString = ConfigurationManager.ConnectionStrings["OnlineResturansConnectionString"].ToString();
SqlConnection sqlcon = new SqlConnection(conString);
SqlCommand sqlcmd;
SqlDataAdapter da;
DataTable dt = new DataTable();
String query;
if ((EmailTxt.Text == "") & (CellphoneTxt.Text == ""))
{
query = "select * from users";
}
else
{
query = "select * from users where (cellphone=@cellphone)OR(email=@email)";

}

sqlcmd = new SqlCommand(query, sqlcon);
sqlcon.Open();
da = new SqlDataAdapter(sqlcmd);
dt.Clear();
da.Fill(dt);
if (dt.Rows.Count > 0)
{
UserGrid.DataSource = dt;
UserGrid.DataBind();
}
else
{
UserGrid.DataBind();
NotFoundMsg.Visible = true;
}
sqlcon.Close();
}


protected void Button1_Click(object sender, EventArgs e)
{
NotFoundMsg.Visible = false;
GridData();
}


117411

aslan
شنبه 09 فروردین 1393, 15:45 عصر
سلام
شما باید
@cellphone و @email را بصورت پارامتر تعریف کنید ..........

angel farahani
شنبه 09 فروردین 1393, 15:47 عصر
میشه بگید در این کدی که نوشتم در کجای آن به صورت پارامتر تعریف کنم ؟

aslan
شنبه 09 فروردین 1393, 16:45 عصر
اینو تست کنید :
if ((EmailTxt.Text == "") & (CellphoneTxt.Text == ""))
{
query = "select * from users";
}
else
{
query = "select * from users where (cellphone=@cellphone)OR(email=@email)";

}

sqlcmd = new SqlCommand(query, sqlcon);
sqlcmd.Parameters.AddWithValue("@cellphone", CellphoneTxt.Text);
sqlcmd.Parameters.AddWithValue("@email", EmailTxt.Text);
sqlcon.Open();
da = new SqlDataAdapter(sqlcmd);
dt.Clear();
da.Fill(dt);

aslan
شنبه 09 فروردین 1393, 16:46 عصر
اینو تست کنید :
if ((EmailTxt.Text == "") & (CellphoneTxt.Text == ""))
{
query = "select * from users";
}
else
{
query = "select * from users where (cellphone=@cellphone)OR(email=@email)";

}

sqlcmd = new SqlCommand(query, sqlcon);
sqlcmd.Parameters.AddWithValue("@cellphone", CellphoneTxt.Text);
sqlcmd.Parameters.AddWithValue("@email", EmailTxt.Text);
sqlcon.Open();
da = new SqlDataAdapter(sqlcmd);
dt.Clear();
da.Fill(dt);

angel farahani
شنبه 09 فروردین 1393, 17:08 عصر
وای مرسی درست شد :) فقط یه چیزی اینکه چرا در حالتی که سرچ نمی کنم و کل افراد را نشان می ده ، Paging آن کار نمی کنه و فقط در صفحه 1 باقی می مونه ؟ خطایی هم نمی ده