PDA

View Full Version : جلو گیری از تکرار رکورد ها در گرید ویو؟



MiniMicro
دوشنبه 25 فروردین 1393, 12:25 عصر
سلام دوستان من یه گرید ویو دارم که یه سری اطلاعات رو در اون نمایش میدم ولی وقتی دوبار این کار صورت میگیره رکورد های تکرار میشن البته قبل از هر select هم datasource گریدویو رو null میکنم ولی بازم تکرار میشه

ممنون میشم راهنمایی کنید...

behzadkhan
دوشنبه 25 فروردین 1393, 12:41 عصر
با سلام


MiniMicro (http://barnamenevis.org/member.php?133016-MiniMicro) لطفا اون تیکه از کدوتو بزار تا بررسی و اشکالزدایی و تصحیح شود.

با تشکر

MiniMicro
دوشنبه 25 فروردین 1393, 15:36 عصر
سلام جناب behzadkhan
من تو دیتابیس برای هر جدولم یه ویو ساختم که هر وقت میخوام کل اطلاعات اون جدول رو نمایش بدم از اون ویو select میگیرم،آیا کار خوبیست!!؟
و یه همین طور sp هایی رو ساختم که دو ورودی از نوع تاریخ میگیرند و سفارشاتی که بین اون تاریخ باشند رو بر میگردونه که این sp ها رو بوسیله توابع موجود در کلاس های برنامه اجرا میکنم که نتیجه رو بصورت دیتا تیبل برمیگردونه و در نهایت دیتا تیبل برگشت داده شده به عنوان datasource گریدویو تعیین میشوند ولی وقتی که دو بار روی دکمه مثلا نمایش همه کلیک میکنم رکوردها در گرید ویو تکرار میشوند در حالی که وقتی دکمه کلیک میشه اولین کاری که انجام میده اینه که datasource گریدویو برابر با null میشه.
اینم کد:

public DataTable SelectAll()
{
da = new SqlDataAdapter("select * from View_SelectAll", Connection);
da.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
string gregorianDate = dr["تاریخ ثبت"].ToString();
year = gregorianDate.Substring(0, 4);
month = gregorianDate.Substring(5, 2);
day = gregorianDate.Substring(8, 2);

PersianCalendar pc = new PersianCalendar();
string date = year.ToString() + "/" + month.ToString() + "/" + day.ToString();
DateTime gregorianDate2 = DateTime.Parse(date);
string persianDate = pc.GetYear(gregorianDate2) + "/" + pc.GetMonth(gregorianDate2) + "/" + pc.GetDayOfMonth(gregorianDate2);
dr["تاریخ ثبت"] = persianDate;
dt.AcceptChanges();
}
return dt;
}
public DataTable SearchByOrderDate(DateTime startDate, DateTime endDate)
{
SqlDataAdapter da = new SqlDataAdapter("SelectBetweenTwoDate", Connection);
da.SelectCommand.CommandType = CommandType.StoredProcedure;

da.SelectCommand.Parameters.AddWithValue("@startDate", startDate.ToShortDateString());
da.SelectCommand.Parameters.AddWithValue("@endDate", endDate.ToShortDateString());
da.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
string gregorianDate = dr["تاریخ ثبت"].ToString();
year = gregorianDate.Substring(0, 4);
month = gregorianDate.Substring(5, 2);
day = gregorianDate.Substring(8, 2);

PersianCalendar pc = new PersianCalendar();
string date = year.ToString() + "/" + month.ToString() + "/" + day.ToString();
DateTime gregorianDate2 = DateTime.Parse(date);
string persianDate = pc.GetYear(gregorianDate2) + "/" + pc.GetMonth(gregorianDate2) + "/" + pc.GetDayOfMonth(gregorianDate2);
dr["تاریخ ثبت"] = persianDate;


dt.AcceptChanges();
}
return dt;
}

اینم کد دکمه:

private void btnShow_Click_1(object sender, EventArgs e)
{

dgvResult.DataSource = "";


DateTime startDate, endDate;
startDate =Convert.ToDateTime( dtDateOfOrder.SelectedDateInDateTime.ToShortDateSt ring());
endDate =Convert.ToDateTime( dtDateOfOrder2.SelectedDateInDateTime.ToShortDateS tring());
if (startDate<=endDate)
{
dt = coats.SearchByOrderDate(startDate, endDate);
dgvResult.DataSource = dt;
for (int i = 0; i < dgvResult.Rows.Count - 1; )
{
dgvResult.Rows[i].DefaultCellStyle.BackColor = Color.LightGreen;
dgvResult.Rows[i + 1].DefaultCellStyle.BackColor = Color.Cornsilk;
i = i + 2;


}
}
else
{
MessageBoxFarsi.Show("مقدار تاریخ دوم نمی تواند کمتر از تاریخ اول باشد", "هشدار", MessageBoxFarsiButtons.OK, MessageBoxFarsiIcon.Warning);
}
}

private void btnShowAll_Click(object sender, EventArgs e)
{


dgvResult.DataSource = null;

dgvResult.DataSource= pajama.SelectAll();
}

forodo
دوشنبه 25 فروردین 1393, 15:50 عصر
سلام
dataGridView1.Rows.Clear();

MiniMicro
دوشنبه 25 فروردین 1393, 16:06 عصر
سلام
dataGridView1.Rows.Clear();
دوست عزیز خطای Cannot clear this list. رو میده....

behzadkhan
دوشنبه 25 فروردین 1393, 18:11 عصر
با سلام

ببین فرقی می کنه:

=================================

در رویداد btnShowAll_Click

dt را هم خالی کنید.



با تشکر

MiniMicro
دوشنبه 25 فروردین 1393, 18:51 عصر
با سلام

ببین فرقی می کنه:

=================================

در رویداد btnShowAll_Click

dt را هم خالی کنید.



با تشکر



دوستان ممنون از راهنماییتون مشکلم حل شد
این کارو انجام دادم اومدم تو تابع selectAll() اول datatable رو سطرهاش رو پاک کردم اینطوری:


public DataTable SelectAll()
{
dt.Rows.Clear();
da = new SqlDataAdapter("select * from View_SelectAllPajamas", Connection);
da.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
string gregorianDate = dr["تاریخ ثبت"].ToString();
year = gregorianDate.Substring(0, 4);
month = gregorianDate.Substring(5, 2);
day = gregorianDate.Substring(8, 2);

PersianCalendar pc = new PersianCalendar();
string date = year.ToString() + "/" + month.ToString() + "/" + day.ToString();
DateTime gregorianDate2 = DateTime.Parse(date);
string persianDate = pc.GetYear(gregorianDate2) + "/" + pc.GetMonth(gregorianDate2) + "/" + pc.GetDayOfMonth(gregorianDate2);
dr["تاریخ ثبت"] = persianDate;
dt.AcceptChanges();
}
return dt;
}

agent_6332
سه شنبه 26 فروردین 1393, 08:20 صبح
دوست عزیز قبل از هر اتصال
datagridview1.dataset=null;
datagridview1.datasource=null;