PDA

View Full Version : سوال: فرستادن یک سطر از دیتاگرید به reportviewer



Beginner67
چهارشنبه 07 مرداد 1394, 16:47 عصر
سلام.

بدون دیتاگرید،در reportviewer اطلاعات رکورد اول جدول نمایش داده میشود.
برای اینکه بتونم رکورد دیگری ررو انتخاب کنم،باید در فرم دیگه دیتاگرید ویو بذارم،و با انتخاب یک سطر از اون دیتاگرید اطلاعات اون سطر رو بفرستم به فرمی که report viewer داره.

چطور میتونم با انتخاب یک سطر از دیتاگریدویو در form1 اطلاعات اون رو به form2 که reportviewer داره بفرستم؟

Beginner67
چهارشنبه 07 مرداد 1394, 19:32 عصر
کاری که من کردم این بود.
یه فرم با دیتاگرید گذاشتم و یه دکمه.
برای دکمه این رو نوشتم:

ssesion f = new ssesion();
f.seid = dataGridView1.SelectedRows[0].Cells[5].Value.ToString();
f.ShowDialog();


و تو فرمی که Report viewer بود این رو :


private void reportViewer1_Load(object sender, EventArgs e)
{
SqlConnection cnc = new SqlConnection(ConfigurationManager.ConnectionStrin gs["c"].ConnectionString);
cnc.Open();
string sqlcommand = "SELECT * from session WHERE seid=@seid";
SqlCommand cmd = new SqlCommand(sqlcommand, cnc);
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
cmd.ExecuteNonQuery();
cnc.Close();
reportViewer1 = dt;

}


فقط نمیدونم برای خط آخر چجوری dt رو بریزم تو report viewer !
اصلا راهی که رفتم درسته؟اگر درسته چطور باید خط آخر رو اصلاح کنم؟
ممنون میشم راهنمایی کنید.

Beginner67
پنج شنبه 08 مرداد 1394, 11:45 صبح
لطفا راهنمایی کنید.

khokhan
پنج شنبه 08 مرداد 1394, 12:14 عصر
لطفا راهنمایی کنید.
توی فرم گزارش دیگه نمی خواد کوئری بزنی .....
یعنی همون فرم اولی ردیف یا ردیفهای انتخابی رو بریز داخل یه دیتاتیبل و پاس بده به گزارش و کار گزارش رو توی همون فرم اولی تموم کن
بعد گزارش رو که آماده کردی به کنترل reportViewer موجود در فرم دوم اختصاص بده و فرم دوم رو show کن :لبخند:

khokhan
پنج شنبه 08 مرداد 1394, 12:17 عصر
بیا این هم نمونه همون چیزی که بالا براتون توضیح دادم ...ردیفهای انتخابی با چک باکس مشخص می شن

Beginner67
پنج شنبه 08 مرداد 1394, 17:19 عصر
ممنون بابت راهنماییتون.
کاری که شما فرمودین رو انجام دادم ولی سطر اول دیتاگرید رو نمایش میده.
کاری که انجام دادم رو توضیح میدم ممنون میشم ببینید کجا رو اشتباه رفتم.

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

کدی که توی دکمه گذاشتم اینه :

private void button1_Click(object sender, EventArgs e)
{
ssesion f = new ssesion();
DataRow datarow = null;
DataTable dt = new keyriyeDataSet.sessionDataTable();
foreach (DataGridViewRow rowa in dataGridView1.Rows)
{
if (Convert.ToBoolean(rowa.Cells[0].Value) == true)
{
datarow = ((DataRowView)rowa.DataBoundItem).Row;
dt.ImportRow(datarow);
}
}
f.reportViewer1.LocalReport.DataSources.Clear();
f.reportViewer1.LocalReport.ReportEmbeddedResource = "kheyrie.rtp_sesstion.rdlc";
Microsoft.Reporting.WinForms.ReportDataSource dataset = new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", dt);
f.reportViewer1.LocalReport.DataSources.Add(datase t);
f.reportViewer1.LocalReport.Refresh();
f.reportViewer1.RefreshReport();
f.reportViewer1.SetDisplayMode(DisplayMode.PrintLa yout);
f.ShowDialog();
}


و البته این هم کد load همین فرم ک دیتاگرید رو پر میکنه.

this.sessionTableAdapter.Fill(this.keyriyeDataSet. session);


در فرم ssestion هم که reportviewer هست این کد :

private void ssesion_Load(object sender, EventArgs e)
{

this.reportViewer1.RefreshReport();
}


private void ssesion_FormClosing(object sender, FormClosingEventArgs e)
{
reportViewer1.LocalReport.ReleaseSandboxAppDomain( );
}


ولی موقع اجرا در فرم ssestion سطر اول دیتاگرید رو نشون میده کاری به اینکه من کدوم سطر رو انتخاب میکنم نداره.

چطور باید سطر مورد نظرم رو به reportviewer بفرستم؟البته بدون چک باکس.

khokhan
پنج شنبه 08 مرداد 1394, 18:29 عصر
چطور باید سطر مورد نظرم رو به reportviewer بفرستم؟البته بدون چک باکس.

اگه دقت کنین در آخر حلقه ای که سطر های گرید ویو رو می شمره یه دونه عبارت ، Row هست اونو بایستی بکنی SelectedRows
در پائین اون سطر هم یه خط کد هست که ردیفهایی که چک باکس شون تیک خورده رو چک می کنه ، اونو هم بردار ...... همین ....

یعنی با تغییراتی که گفتم بایستی کدهای مربوط به حلقه این شکلی بشه :


foreach (DataGridViewRow rowa in dataGridView1.SelectedRows)
{
//if (Convert.ToBoolean(rowa.Cells[0].Value) == true)
//{
datarow = ((DataRowView)rowa.DataBoundItem).Row;
dt.ImportRow(datarow);
//}
}


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

Beginner67
پنج شنبه 08 مرداد 1394, 18:49 عصر
خیلی لطف کردید درست شد.
ممنونم بابت وقتی که گذاشتید.