ممنون استاد افراد
با کلی ور رفتن بالاخره حل شد کد نهایی ام اینطوری شد :

List<string> list = new List<string>();
for (var i = 0; i < rgv.RowCount; i++)
{
if (!Convert.ToBoolean(rgv.Rows[i].Cells[0].Value)) continue;
list.Add(rgv.ChildRows[i].Cells["melli"].Value.ToString());
string ids = string.Join(",", list.Select(x => x.ToString()).ToArray());
string query = string.Format("SELECT * FROM table WHERE melli in ({0})", ids);
}


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