PDA

View Full Version : سوال: جستجو در دو گریدویو



shirin_sh1024
جمعه 12 شهریور 1389, 16:52 عصر
سلام
دوتا datagridview دارم
یکی از گرید ویو ها شامل یه اطلاعات اصلیه که تو هر ردیفش شامل یک کد و نام و آدرس و ...
گرید ویو دیگه دو تا ستون داره که یه ستونش ردیفه و یه ستون دیگش کد نوشته شده
هر کدوم از کد های گرید ویو اول چند بار در گرید ویو دومی تکرار شده
با چه دستوری میشه تعداد این دفعاتی که این کد تکرار شده رو پیدا کرد؟
به عبارت ساده تر میخوام سطر به سطر از گرید ویو اول کدش خونده بشه و تعداد تکرار اون کد در گریدویو دومی بدست بیاد و تا آخر یکی یکی تعداد تکرار هر کدوم از کدهای گرید ویو اول در گرید ویو دوم رو بدست بیارم.
کسی میتونه راهنمایی کنه؟

flash118
جمعه 12 شهریور 1389, 21:02 عصر
شيرين خانوم با سلام شما مي تونيد بعد از set كردن اطلاعاتتون در گريدويو اول با استفاده حلقه تكرار از اول گريد ويو تا يكي مونده به انتها گريد ويو را سطر به سطر جستجو كنيد و با يه متغيير بعنوان شمارنده تعداد كدهاي تكراري را بشماريد و بعد از اتمام در گريد ويو دوم مقدار مغير را با ستون دوم كه تعداد تكرار كد خاص هست انجام بدي
البته يه ايراد داره كه بهينه نيست ولي با يكمي تغييرات اساسي ميتونيد بهينه كنيد البته اگه مقدار زمان اجرايي براتون مهم باشه راستي زمان اونقدر نمي يره كه خسته كننده باشه ولي در داده هاي بزرگ ممكنه مشكل ساز باشه
فعلا در امان ايزد منان :لبخندساده:

shirin_sh1024
جمعه 12 شهریور 1389, 21:04 عصر
شما مي تونيد بعد از set كردن اطلاعاتتون در گريدويو اول با استفاده حلقه تكرار از اول گريد ويو تا يكي مونده به انتها گريد ويو را سطر به سطر جستجو كنيد و با يه متغيير بعنوان شمارنده تعداد كدهاي تكراري را بشماريد و بعد از اتمام در گريد ويو دوم مقدار مغير را با ستون دوم كه تعداد تكرار كد خاص هست انجام بدي
دیتا های گرید رو از یه فایل اکسل خوندم قبلا که با گرید کار میکردم چون از بانک اطلاعاتی بود همه ی این کار ها رو توسط sp میشد انجام داد ولی اینجا نمیدونم چطوری باید این کار رو انجام بدم
خواستم از این استفاده کنم:


foreach (DataRow dr in dgvExcelList2)
{
foreach (DataRow dr2 in dgvExcelList1)
{
if (dgvExcelList2.SelectedRows[0].Cells[1] == gvExcelList1.SelectedRows[0].Cells[2])
txtgood.Visible = true;
else
txtbad.Visible = false;

}
}
ولی نشد ، اررور داد
میشه یه کد نمونه بزارید همین دو تا حلقه تو در تو رو چطوری باید نوشت؟

#aliyari_C
شنبه 13 شهریور 1389, 00:11 صبح
سلام
یک از دلایل خلق LINQ همین است.
به فرض که data شما به صورت زیر است
این کلاس


class Order
{
public Order() { }
public Order( int ser ,int code)
{
this.ser=ser;
this.code=code;
}
public int ser { get; set; }
public int code{get;set;}

}
public class Customer
{
public Customer() { }
public Customer(int code, string Name)
{
this.code = code;
this.Name = Name;

}

public int code{ get; set; }
public string Name { get; set; }


}
این هم اجرا:




List<Customer> Lc = new List<Customer>(){new Customer(1,"ali"),new Customer(2,"Reza"),new
Customer(3,"mansor"),new Customer(4,"lilia"),
new Customer(5,"maryam"),new Customer(6,"parisa"),new Customer(7,"man")};
List<Order> Lo = new List<Order>() { new Order(1, 1), new Order(2, 1), new Order(3, 2), new Order(4, 3), new Order(5, 2), new Order(7, 9) };


dataGridView1.DataSource = Lc.Join(Lo.Select(d => d.code), k => k.code, f => f, (g, h) => g).Select(d => new { Name = d.Name, Code = Lo.Where(f=>f.code==d.code).Count() }).Distinct().ToArray();



اگر نا مفهوم بود بگو
موفق و تندرست باشی
__________________________________________________ _________________________
چون به دریاه می توانی راه یافت.................سوی یک قطره چرا باید شتافت

shirin_sh1024
شنبه 13 شهریور 1389, 09:30 صبح
اگر نا مفهوم بود بگو

راستش منLINQ بلد نیستم
راه دیگه نداره از طریق کدنویسی بشه این کار رو کرد؟

shirin_sh1024
یک شنبه 14 شهریور 1389, 20:58 عصر
کد رو ضمیمه کردم
لطفا یه کمی کمک کنید :عصبانی++:

shirin_sh1024
جمعه 19 شهریور 1389, 13:14 عصر
با تشکر از خودم!با این کد مشکل حل شد
ولی یعنی این دو خط کد اینقدر سخت بود که هیچ کسی کمکی نکرد؟!
همین دو خط ساده چند روز وقتم رو گرفت



int mycount = 0;
for (int j = 0; j < dgvExcelList1.RowCount-1; j++)
{
string str1 = dgvExcelList2.Rows[0].Cells[1].Value.ToString();
string str2 = dgvExcelList1.Rows[j].Cells[0].Value.ToString();

if (str1.Equals(str2))
{
mycount++;
txtgood.Text = mycount.ToString();
}
else
txtbad.Text = "Oops!";
}


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