PDA

View Full Version : سوال: حفظ شدن حالت چک باکس های گرید با تغییر در شرایط جستجو



hamidtmu
شنبه 14 اردیبهشت 1398, 12:44 عصر
با سلام.
دوستان بزرگوار به مشکل برخوردم و خیلی هم عجله دارم
من چک باکس های دیتا گرید ویو را به صورت زیر انتخاب می کنم . وقتی سرچم را عوض می کنم چک باکس های انتخاب شده پاک می شند . می خوام وقتی بر اساس تکست باکس فیلتر عوض می شه اونایی که چک شدند پاک نشند


foreach (DataGridViewRow row in dataGridView1.Rows)
row.Cells[0].Value = checkBox1.Checked;


توضیحات اضافه.
یه دیتا گرید دارم که یک ستونش چک باکسه و با سرچ اونا را انتخاب میکنم.ولی بعد از انتخاب با بالا و پاین شدن دیتا گرید(به دلیل سرچ) اونایی که تیک زدم .تیکشون برداشته میشه

hamidtmu
یک شنبه 15 اردیبهشت 1398, 14:15 عصر
دوستان عزیز کماکان منتظر هستم

Mahmoud Zaad
یک شنبه 15 اردیبهشت 1398, 15:38 عصر
سلام
قبل از رفرش، id ردیفها رو توی یه لیست ذخیره کن. بعد از لود اطلاعات، ردیفهایی که توی لیست هستند رو تیک بزن.

hamidtmu
یک شنبه 15 اردیبهشت 1398, 22:02 عصر
سلام
قبل از رفرش، id ردیفها رو توی یه لیست ذخیره کن. بعد از لود اطلاعات، ردیفهایی که توی لیست هستند رو تیک بزن.


تشکر دوست عزیز .ولی تا حالا این کار را انجام ندادم . میشه لطفا راهنمایی بیشتری بفرمایید. چند تا مشکل به همین صورت دارم
چندیدن نمونه برنامه دیدم ولی همین مشکل را داشتند.

بابت تصحیح عنوان هم توسط مدیران سپاس. از این به بعد عنوان تایپیک را درست میزارم

Mahmoud Zaad
یک شنبه 15 اردیبهشت 1398, 22:38 عصر
الان امکان تست ندارم ولی روالش به صورت زیر هست:
//ایجاد یک لیست برای ذخیره
//id (هر فیلدی که یکتا باشد)
List<string> _myList=new List<string>();
foreach(DataGridViewRow row in dataGridview1.Rows)
{
if(Convert.ToBoolean(row.Cells["checkColumn"].Value.ToString(()
{
_myList.Add(row.Cells["idColumn"].Value.ToString());
}
}
حالا بعد از لود مجدد اطلاعات:
foreach(string str in _myList)
{
foreach(DataGridViewRow row in dataGridView1.Rows)
{
if(str==row.Cells["idColumn"].Value.ToString())
{
//تیک زدن مجدد ردیفها
row.Cells["checkColumn"].Value=true;
}
}
}
ممکنه غلط املایی در کدها وجود داشته باشه یا حروف بزرگ و کوچک رعایت نشده باشه.

hamidtmu
یک شنبه 15 اردیبهشت 1398, 22:58 عصر
تشکر از دوست بزرگوار. من این کد را دقیقا کجا باید بزارم . توی فرم لود و چک باکس گذاشتم جواب نداد.
ایا باید به این کد چیزی اضافه کنم . مثلا اونجا که زده بعد از لود مجدد اطلاعات

mr.sirwan
دوشنبه 16 اردیبهشت 1398, 01:44 صبح
تشکر از دوست بزرگوار. من این کد را دقیقا کجا باید بزارم . توی فرم لود و چک باکس گذاشتم جواب نداد.
ایا باید به این کد چیزی اضافه کنم . مثلا اونجا که زده بعد از لود مجدد اطلاعات

دوست عزیز شما مشکلت رو که میدونی کجاست پس طبعا باید بدونی این کدهارو کجا بذاری، جناب محمود زاد هم که براتون کامنت گذاری کرده دیگه معلومه باید کدها کجا نوشته بشن
خواهشا copy-paster نباشید، این سوالاتی که میپرسین واقعا پیش پا افتاده و مبتدیانه و جسارتا ناشیانه هستن. با کپی پیست کردن به جایی نمیرسین اگر واقعا میخواید برنامه نویس بشید قبل از شروع به کدنویسی حتما باید چندین دوره رو بگذرونین، به یک دوره هم نباید بسنده کنید حتما چندین دوره رو بگذرونین، توی کشور ما که کپی رایت برای محصولات کشورهای بیگانه وجود نداره میتونین خیلی راحت و بصورت رایگان دوره های زبان اصلی رو دانلود کنید

امیدوارم از این حرف بنده ناراحت نشید اما واقعیت ها رو باید گفت

hamidtmu
دوشنبه 16 اردیبهشت 1398, 09:50 صبح
دوست عزیز شما مشکلت رو که میدونی کجاست پس طبعا باید بدونی این کدهارو کجا بذاری، جناب محمود زاد هم که براتون کامنت گذاری کرده دیگه معلومه باید کدها کجا نوشته بشن
خواهشا copy-paster نباشید، این سوالاتی که میپرسین واقعا پیش پا افتاده و مبتدیانه و جسارتا ناشیانه هستن. با کپی پیست کردن به جایی نمیرسین اگر واقعا میخواید برنامه نویس بشید قبل از شروع به کدنویسی حتما باید چندین دوره رو بگذرونین، به یک دوره هم نباید بسنده کنید حتما چندین دوره رو بگذرونین، توی کشور ما که کپی رایت برای محصولات کشورهای بیگانه وجود نداره میتونین خیلی راحت و بصورت رایگان دوره های زبان اصلی رو دانلود کنید

امیدوارم از این حرف بنده ناراحت نشید اما واقعیت ها رو باید گفت

سلام و تشکر ، حق با شماست. ولی واقعا اینو نفهمیدم.

این کد تشکیل دیتا گرید



radGridView1.Columns.Add(new DataGridViewCheckBoxColumn() { Name = "Col1", HeaderText = "انتخاب", Width = 50 });
radGridView1.Columns.Add(new DataGridViewTextBoxColumn() { Name = "Col2", HeaderText = "ردیف", DataPropertyName = "ID", Width = 70 });








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



//ایجاد یک لیست برای ذخیره
//id (هر فیلدی که یکتا باشد)
List<string> _myList = new List<string>();
foreach (DataGridViewRow row in radGridView1.Rows)
{
if (Convert.ToBoolean(row.Cells["Col1"].Value.ToString()))
{
_myList.Add(row.Cells["Col2"].Value.ToString());
}
}
//حالا بعد از لود مجدد اطلاعات:
foreach (string str in _myList)
{
foreach (DataGridViewRow row in radGridView1.Rows)
{
if (str == row.Cells["Col2"].Value.ToString())
{
//تیک زدن مجدد ردیفها
row.Cells["Col1"].Value = true;
}

mr.sirwan
دوشنبه 16 اردیبهشت 1398, 17:55 عصر
ببین دوست عزیز این کد:
//ایجاد یک لیست برای ذخیره
//id (هر فیلدی که یکتا باشد)
List<string> _myList=new List<string>();
foreach(DataGridViewRow row in dataGridview1.Rows)
{
if(Convert.ToBoolean(row.Cells["checkColumn"].Value.ToString(()
{
_myList.Add(row.Cells["idColumn"].Value.ToString());
}
}




رو باید قبل از ریفرش شدن دیتاگرید بذارید یعنی موقعی که دیتاگریدتون اطلاعات داخلش هست و مثلا به قول خودتون قراره نحوه نمایش یا نحوه جستجو رو عوض کنین و داده دوباره از دیتابیس واکشی بشن، پس قبل از اینکه سطرهای دیتاگرید رو پاک کنید باید کد بالارو اجرا کنید.
حالا بعد از اینکه دیتاگرید ریفرش شد و داده ها از سمت دیتابیس لود شدن توی دیتاگرید باید این کد رو قرار بدین:
حالا بعد از لود مجدد اطلاعات:
foreach(string str in _myList)
{
foreach(DataGridViewRow row in dataGridView1.Rows)
{
if(str==row.Cells["idColumn"].Value.ToString())
{
//تیک زدن مجدد ردیفها
row.Cells["checkColumn"].Value=true;
}
}
}

hamidtmu
دوشنبه 16 اردیبهشت 1398, 18:50 عصر
تشکر سیروان عزیز. من این کار را انجام دادم و متوجه شدم ولی نشد جان برادر
من قبل از تغیر در اطلاعات دیتا گرید (قبل از سرچ اون کد را گذاشتم)
بعد از کد سرچ هم کد پایینی را گذاشتم ولی خطا داد

این کل کد منه



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsApplication21
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;initial catalog=testDB;integrated security=true");
SqlCommand cmd = new SqlCommand();

private void Form1_Load(object sender, EventArgs e)
{
DataSet ds = new DataSet();
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = new SqlCommand();
adp.SelectCommand.Connection = con;
adp.SelectCommand.CommandText = "Select * from Student1 where code like '%' + @S + '%'";
adp.SelectCommand.Parameters.AddWithValue("@S", textBox1.Text + "%");
adp.Fill(ds, "Student1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Student1";


}

private void textBox1_TextChanged(object sender, EventArgs e)
{
List<string> _myList = new List<string>();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (Convert.ToBoolean(row.Cells["checkColumn"].Value.ToString()))
{
_myList.Add(row.Cells["Code"].Value.ToString());
}
}



DataSet ds = new DataSet();
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = new SqlCommand();
adp.SelectCommand.Connection = con;
adp.SelectCommand.CommandText = "Select * from Student1 where code like '%' + @S + '%'";
adp.SelectCommand.Parameters.AddWithValue("@S", textBox1.Text + "%");
adp.Fill(ds, "Student1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Student1";

//حالا بعد از لود مجدد اطلاعات:
foreach (string str in _myList)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (str == row.Cells["Code"].Value.ToString())
{
//تیک زدن مجدد ردیفها
row.Cells["checkColumn"].Value = true;
}
}
}



}
}
}





اینم صفحه نرم افزار

150129

اینم خطا هنگام سرچ


150130

mr.sirwan
دوشنبه 16 اردیبهشت 1398, 19:59 عصر
خب این خطا احتمالا به این علته که هیچ ستونی با این نام (checkcolumn) در دیتاگریدتون نیست، پس باید اول یه ستون با این نام (توجه کنین منظور از نام، پراپرتی name هست، نه پراپرتی text) ایجاد کنید

hamidtmu
دوشنبه 16 اردیبهشت 1398, 20:59 عصر
خب این خطا احتمالا به این علته که هیچ ستونی با این نام (checkcolumn) در دیتاگریدتون نیست، پس باید اول یه ستون با این نام (توجه کنین منظور از نام، پراپرتی name هست، نه پراپرتی text) ایجاد کنید

150132

همه ستون ها را چک کردم ولی باز خطا داد.
اینم اخرین اصلاحات

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsApplication21
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;initial catalog=testDB;integrated security=true");
SqlCommand cmd = new SqlCommand();

private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'testDBDataSet.Student1' table. You can move, or remove it, as needed.
this.student1TableAdapter1.Fill(this.testDBDataSet .Student1);
// TODO: This line of code loads data into the 'dataSet1.Student1' table. You can move, or remove it, as needed.
this.student1TableAdapter.Fill(this.dataSet1.Stude nt1);
DataSet ds = new DataSet();
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = new SqlCommand();
adp.SelectCommand.Connection = con;
adp.SelectCommand.CommandText = "Select * from Student1 where code like '%' + @S + '%'";
adp.SelectCommand.Parameters.AddWithValue("@S", textBox1.Text + "%");
adp.Fill(ds, "Student1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Student1";


}

private void textBox1_TextChanged(object sender, EventArgs e)
{
List<string> _myList = new List<string>();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (Convert.ToBoolean(row.Cells["checkColumnDataGridViewTextBoxColumn"].Value.ToString()))
{
_myList.Add(row.Cells["codeDataGridViewTextBoxColumn"].Value.ToString());
}
}



DataSet ds = new DataSet();
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = new SqlCommand();
adp.SelectCommand.Connection = con;
adp.SelectCommand.CommandText = "Select * from Student1 where code like '%' + @S + '%'";
adp.SelectCommand.Parameters.AddWithValue("@S", textBox1.Text + "%");
adp.Fill(ds, "Student1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Student1";

//حالا بعد از لود مجدد اطلاعات:
foreach (string str in _myList)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (str == row.Cells["codeDataGridViewTextBoxColumn"].Value.ToString())
{
//تیک زدن مجدد ردیفها
row.Cells["checkColumnDataGridViewTextBoxColumn"].Value = true;
}
}
}



}

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{

}
}
}







شاید دیتا بیسم مشکل داره نوع متغیراش؟

اینم بگم کد را از نوع کلید و غیر کلید دو تاشو تست کردم
150133

mr.sirwan
دوشنبه 16 اردیبهشت 1398, 21:08 عصر
توی دیتاگرید وقتی ستون رو تعریف کردین باید نوع ستون رو روی DatagridViewCheckboxColumn بذارین.
این شرط رو:
if (Convert.ToBoolean(row.Cells["checkColumnDataGridViewTextBoxColumn"].Value.ToString()))
به این شکل تغییر بدین:

if (((bool)row.Cells["checkColumnDataGridViewTextBoxColumn"].Value))

hamidtmu
دوشنبه 16 اردیبهشت 1398, 21:22 عصر
تغیر دادم.
بازم خطا داد.
150134

150135

اینم کل پروژه (http://s9.picofile.com/file/8359636184/WindowsFormsApplication21.zip.html)

mr.sirwan
دوشنبه 16 اردیبهشت 1398, 21:52 عصر
ستون checkbox توی دیتابیس مقادیرشون null هست باید حتما مقدار داشته باشن برای تبدیل هم از این دستور استفاده کنید:
Convert.ToBoolean(row.Cells["checkColumnDataGridViewTextBoxColumn"].Value)

hamidtmu
دوشنبه 16 اردیبهشت 1398, 22:17 عصر
تشکر مستر سیروان. گیر داره. نمیدونم چرا جواب نمیده
150136

mr.sirwan
دوشنبه 16 اردیبهشت 1398, 22:23 عصر
تو پست قبلی گفتم که با این خط تبدیل رو انجام بدین:
Convert.ToBoolean(row.Cells["checkColumnDataGridViewTextBoxColumn"].Value)

hamidtmu
دوشنبه 16 اردیبهشت 1398, 22:38 عصر
'گذاشتم باز همون خطارا داد
ببین این اسم را درست گذاشتم. همون نام را میگم

150137

hamidtmu
سه شنبه 31 اردیبهشت 1398, 14:41 عصر
با سلام.
من دوستان تمام اوامر استاد شروین را انجام دادم ولی نتیجه به صورت زیر شد
الان به سرچ نام همه تیک دار میشن و وقتی سرچ را پاک می کنم برخی تیک می خورن (بدون اینکه تیک زده باشم)
این عکس
150220



اینم کد فوق که توی جستجوی نام گذاشتم. هر چند دوستان میگن ساده هست ولی واقعا پیچیدست


private void name_TextChanged(object sender, EventArgs e)
{
//ایجاد یک لیست برای ذخیره


List<string> _myList = new List<string>();
foreach (DataGridViewRow row in radGridView1.Rows)
{
Convert.ToBoolean(row.Cells["Column1"].Value);
{
_myList.Add(row.Cells["Column2"].Value.ToString());
}
}
DataSet ds = new DataSet();
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = new SqlCommand();
adp.SelectCommand.Connection = con;
adp.SelectCommand.CommandText = "Select * from tip where name like '%' + @S + '%'";
adp.SelectCommand.Parameters.AddWithValue("@S", name.Text + "%");
adp.Fill(ds, "tip");
radGridView1.DataSource = ds;
radGridView1.DataMember = "tip";



//for (int row = 0; row < radGridView1.Rows.Count; row++)
// radGridView1.Rows[row].Cells[0].Value = false;

////حالا بعد از لود مجدد اطلاعات:
foreach (string str in _myList)
{
foreach (DataGridViewRow row in radGridView1.Rows)
{
if (str == row.Cells["Column2"].Value.ToString())
{
//تیک زدن مجدد ردیفها
row.Cells["Column1"].Value = true;
}


}
}

}

Mahmoud.Afrad
سه شنبه 31 اردیبهشت 1398, 16:14 عصر
خط 9 را اصلاح کنید.

hamidtmu
سه شنبه 31 اردیبهشت 1398, 16:51 عصر
خط 9 را اصلاح کنید.

با عرض معذرت استاد به چه صورت اصلاح بشه. جسارتا راهنمایی بفرمایید

hamidtmu
پنج شنبه 02 خرداد 1398, 14:49 عصر
چند روش من اصلاح کردم . بی مورد تیک می خورند و اصولی تیک نمی خورند . مثلا من تیک نزدم و برخیاشون خودش میخوره و یا باز همه را تیک میزنه وقتی تکس تغیر می کنه:عصبانی++:

mr.sirwan
پنج شنبه 02 خرداد 1398, 15:17 عصر
دوست عزیز الان خط 9 به نظر شما داره چیکار میکنه؟ منظورم این کده:
Convert.ToBoolean(row.Cells["Column1"].Value);

hamidtmu
پنج شنبه 02 خرداد 1398, 15:42 عصر
اون خط تمام ردیف های دیتا گرید (فقط ستون 1)را به بولین تبدیل میکنه(مقدار چک باکسو)

mr.sirwan
پنج شنبه 02 خرداد 1398, 15:50 عصر
توی همون خط احساس نمیکنی یه چیزی کمه؟ مثل یه دستور if

hamidtmu
پنج شنبه 02 خرداد 1398, 16:05 عصر
استاد کمه. قبلا هم گذاشتم ولی وقتی که مثلا اسم علی را تیک میزنم . بعد دو باره اسم محسن را جستجو و تیک میزنم. دوباره بر می گردم می بینم اسم علی تیکش برداشته شده


فقط زمانی تیک برداشته نمیشه که اون اسم توی صفحه دیتا گرید باشه

مثلا

اگه علیا را سرچ بزنیم(تیک بزنم)

دفعه دیگه علی را سرچ بزنیم تیک برداشته نمیشه

ولی اگه صفحه دیتا گرید به سرچ محسن تغیر پیدا کنه تیک علی برداشته میشه



//ایجاد یک لیست برای ذخیره


List<string> _myList = new List<string>();
foreach (DataGridViewRow row in radGridView1.Rows)
{
if (Convert.ToBoolean(row.Cells["Column1"].Value))
{
_myList.Add(row.Cells["Column2"].Value.ToString());
}
}
DataSet ds = new DataSet();
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = new SqlCommand();
adp.SelectCommand.Connection = con;
adp.SelectCommand.CommandText = "Select * from tip where name like '%' + @S + '%'";
adp.SelectCommand.Parameters.AddWithValue("@S", name.Text + "%");
adp.Fill(ds, "tip");
radGridView1.DataSource = ds;
radGridView1.DataMember = "tip";





//حالا بعد از لود مجدد اطلاعات:
foreach (string str in _myList)
{
foreach (DataGridViewRow row in radGridView1.Rows)
{
if (str == row.Cells["Column2"].Value.ToString())
{
//تیک زدن مجدد ردیفها
row.Cells["Column1"].Value = true;
}


}
}

}






مثل عکس زیر
1
150235



1

150236

Mahmoud Zaad
پنج شنبه 02 خرداد 1398, 17:11 عصر
سلام
خط اول (که مربوط به ایجاد لیست هست) رو باید خارج از textChange یعنی در سطح کلاس تعریف کنید. در نهایت در یک جایی که کاربر تمام آیتم های مورد نیاز رو انتخاب می کنه مثلا وقتی دکمه تایید یا انتخاب زده شد، این لیست رو خالی کنید.
_myList.Clear();

hamidtmu
پنج شنبه 02 خرداد 1398, 17:19 عصر
تشکر دوست عزیز و استاد شروین الان درست شد.

hamidtmu
شنبه 04 خرداد 1398, 19:56 عصر
من همه چی را درست کردم . ولی یه جا باز با مشکل برخوردم:عصبانی++:
توی گزارشات که میگیرم از ردیف های انتخاب شده

فقط اونایی که توی دیتا گرید ویو نمایش میده را می گیره

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



try
{

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(string)));
dt.Columns.Add(new DataColumn("kodM", typeof(string)));
dt.Columns.Add(new DataColumn("s1", typeof(string)));


int dtRow = 0;
for (int row = 0; row < radGridView1.Rows.Count; row++)
{
if ((bool)radGridView1.Rows[row].Cells[0].Value == true)
{
dt.Rows.Add();
dt.Rows[dtRow][0] = radGridView1.Rows[row].Cells[1].Value.ToString();
dt.Rows[dtRow][1] = radGridView1.Rows[row].Cells[2].Value.ToString();
dt.Rows[dtRow][2] = radGridView1.Rows[row].Cells[3].Value.ToString();


dtRow += 1;
}
}

if (dt.Rows.Count > 0)
{
StiReport report = new StiReport();
if (radioButton1.Checked)
report.Load(Application.StartupPath + "\\Report.mrt");
else
report.Load(Application.StartupPath + "\\Report2.mrt");
report.RegBusinessObject("tip", dt);
report.Show();
}

}

catch (Exception)
{
MessageBox.Show("????? ??? ???? ???");
}
_myList.Clear();
}



البته این قطعه کد را توی سرچ زدم



//ایجاد یک لیست برای ذخیره



foreach (DataGridViewRow row in radGridView1.Rows)
{
if (Convert.ToBoolean(row.Cells["Column1"].Value))
{
_myList.Add(row.Cells["Column2"].Value.ToString());
}
}
DataSet ds = new DataSet();
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = new SqlCommand();
adp.SelectCommand.Connection = con;
adp.SelectCommand.CommandText = "Select *from tip where name like '%' + @S + '%'";
adp.SelectCommand.Parameters.AddWithValue("@S", name.Text + "%");
adp.Fill(ds, "tip");
radGridView1.DataSource = ds;
radGridView1.DataMember = "tip";



for (int row = 0; row < radGridView1.Rows.Count; row++)
radGridView1.Rows[row].Cells[0].Value = false;

//حالا بعد از لود مجدد اطلاعات:
foreach (string str in _myList)
{
foreach (DataGridViewRow row in radGridView1.Rows)
{
if (str == row.Cells["Column2"].Value.ToString())
{
//تیک زدن مجدد ردیفها
row.Cells["Column1"].Value = true;
}


}

mr.sirwan
شنبه 04 خرداد 1398, 20:51 عصر
خب این عمل باید هم به این شکل صورت بگیره وقتی داری سرچ میکنی فقط نتایج مرتبط با سرچ باید بهت نشون داده بشه قرار نیست رکوردی غیر از اون واکشی بشه

hamidtmu
شنبه 04 خرداد 1398, 20:56 عصر
فکر کنم بد منظورمو رسوندم
من یه گزارش از یک نفر از کلاس یک و یک نفر از کلاس دو را باهم میخام(با استیمول سافت)

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





وقتی که از دستور top برای نمایش دیتا گرید استفاده می کنم با مشکل روبرو میشم(چون در غیر اینصورت همه را در دیتا گرید نمایش میده و مشکلی نیست). میخام که هر چی را تیک زدم بهم گزارش بده (حتی اگه توی 10 رکورد اول نمایش نده)

راهی هست؟

منظورم اینه که من تیک میزنم ولی با عوض کردن سرچ رکوردهایی که دیتا گرید نمایش میده عوض میشه و تیکم با اینکه سرجاش هست ولی گزارش بهم نمیده.
میخام هر چی سرچ زدم و تیک زدم بهم گزارششو بده


توی شکل زیر من کریم را سرچ زدم و اونو تیک زدم ولی میزنم گزارش نمی تونم گزارش بگیرم.چون سرچمو عوض کردم.ولی اون تیک هنوز سرجاش هست.

http://s9.picofile.com/file/8361629468/4445.png

(من این تایپیکو راه انداختم که فقط بتونم گزارش با سرچ های متفاوت بگیرم همش ردیف شد فقط این تیکه اخرش مونده):گریه:

mr.sirwan
یک شنبه 05 خرداد 1398, 12:55 عصر
شما نحوه گزارشگیریت به چه شکله؟ یعنی دقیقا میخوای از چی گزارش تهیه کنی و روالت به چه صورته؟ تنها راهی که به ذهنم میرسه اینه که طبق لیست آیدی ها یعنی _myList باید گزارش رو تهیه کنی

Mahmoud.Afrad
یک شنبه 05 خرداد 1398, 19:05 عصر
برای نمایش در فرم، میتونید یگ دیتاگرید دیگه اضافه کنید. سطرهای تیک خورده را از دیتاگرید اول به دیتاگرید دوم اضافه کنید.

hamidtmu
یک شنبه 05 خرداد 1398, 21:30 عصر
شما نحوه گزارشگیریت به چه شکله؟ یعنی دقیقا میخوای از چی گزارش تهیه کنی و روالت به چه صورته؟ تنها راهی که به ذهنم میرسه اینه که طبق لیست آیدی ها یعنی _myList باید گزارش رو تهیه کنی

--------------------
من برای دانش آموزان کارنامه می خوام چاپ کنم

هر دانش آموز یک ردیف هست و من میخام دانش آموزان متعددی را جستجو کنم و براشون کارنامه چاپ کنم
---
همه چی مرتبه فقط وقتی اسمی توی دیتا گرید ویو نمایش داده نشه اون را بهش کارنامه نمیده(با این که شما اون را سرچ زدید و تیک زدید ) برای اینکه کارنامه بتونییم بهش بدیم باید وقتی که سرچ زدیم و اسم مورد نظر پیدا شد تیک بزنیم و همون موقع گزارش بگیریم . چون اگه سرچ کس دیگه ای را داشته باشیم از صفحه اسمش خارج میشه


من میخام همه اونایی که انتخاب کردم و توی مای لیست ( _myList) هستند را بهم گزارش بده

hamidtmu
یک شنبه 05 خرداد 1398, 21:31 عصر
برای نمایش در فرم، میتونید یگ دیتاگرید دیگه اضافه کنید. سطرهای تیک خورده را از دیتاگرید اول به دیتاگرید دوم اضافه کنید.

اینم یه مشکل داره .اول اینکه یک دیتا گرید اضافه میاد توی فرم
دوم اینکه تیک هایی که منصرف شدیم از گزارش برداریم به چه صورت از دیتا گرید 2 برداریم

mr.sirwan
یک شنبه 05 خرداد 1398, 21:35 عصر
دوست عزیز گفتم دیگه برای گزارشت به جای دیتاگرید از همون مای لیست استفاده کن، آیدی دانش آموزای موردنظرت که تو مای لیست هست خب پس طبق همون کارتو راه بنداز

Mahmoud Zaad
یک شنبه 05 خرداد 1398, 21:40 عصر
شما یه دکمه به فرم اضافه کنید با عنوان مشاهده لیست انتخابی که با زدن اون دکمه یک فرم جدید باز میشه و _myList رو به این فرم پاس می دید و لیست افراد در یک گرید نمایش داده میشه. در هر ردیف این گرید هم یک دکمه حذف قرار بدید که افراد اضافی قابل حذف باشن.
حالا در همین فرم جدید هم می تونید 2 دکمه قرار بدید. یکی برای برگشت به فرم اصلی و دومی هم چاپ لیست. فقط اگر کاربر بخواد به فرم قبلی برگرده شما باید لیست قبلی رو آپدیت کنید تا موارد حذف شده هم در لیست اعمال بشه.

---------------------------- ویرایش

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

hamidtmu
دوشنبه 06 خرداد 1398, 14:41 عصر
[QUOTE=Mahmoud Zaad;2414988]شما یه دکمه به فرم اضافه کنید با عنوان مشاهده لیست انتخابی که با زدن اون دکمه یک فرم جدید باز میشه و _myList رو به این فرم پاس می دید و لیست افراد در یک گرید نمایش داده میشه. در هر ردیف این گرید هم یک دکمه حذف قرار بدید که افراد اضافی قابل حذف باشن.
حالا در همین فرم جدید هم می تونید 2 دکمه قرار بدید. یکی برای برگشت به فرم اصلی و دومی هم چاپ لیست. فقط اگر کاربر بخواد به فرم قبلی برگرده شما باید لیست قبلی رو آپدیت کنید تا موارد حذف شده هم در لیست اعمال بشه.

---------------------------- ویرایش

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




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

hamidtmu
دوشنبه 06 خرداد 1398, 14:43 عصر
دوست عزیز گفتم دیگه برای گزارشت به جای دیتاگرید از همون مای لیست استفاده کن، آیدی دانش آموزای موردنظرت که تو مای لیست هست خب پس طبق همون کارتو راه بنداز

این فکر می کنم منطقی تره ولی نمیدونم به چه صورت

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

Mahmoud Zaad
دوشنبه 06 خرداد 1398, 14:48 عصر
هر کاری بخواهید می تونید انجام بدید ولی بخشی از کار برای کاربر گنگه و هر زمانی که بخواد نمی تونه ببینه چه کسانی رو انتخاب کرده. شما وقتی دارید تست می کنید یه تعدادی اسم رو ثبت می کنید و بصورت ذهنی هم می دونید کدوم رو انتخاب کردید ولی حساب کنید کاربر از بین چندهزار تا اسم بخواد چند نفر رو پیدا کنه.
استفاده از گرید کمکی کاربر پسند تره.
نیاز نیست همه ستون های گرید رو پر کنید، همون کد و اسم یا چند فیلد خیلی ضروری دیگه.