تخفیف های داغ در جشنواره تابستانه توسینسو تخفیف های داغ در جشنواره تابستانه توسینسو
مانده تا پایان تخفیف
مشاهده دوره ها
0

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

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

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

StiReport report = new StiReport();
report.Load("Report.mrt");
report.RegData("DataSource1",RadGridView1.DataSource);
report.Show();

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

پرسیده شده در 1395/09/26 توسط

13 پاسخ

0

سلام و درود به استاد عزیز

من اینطوری متوجه شدم :

            if (dgv.ChildRows[0].IsSelected = true)
            {
                StiReport report = new StiReport();
                report.Load("ReportList.mrt");
                report.RegData("Tbl_Paziresh", dgv.DataSource);
                report.Show();
            }

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

ممنون

پاسخ در 1395/09/27 توسط
1

ممنون استاد دست مریزاد ...

تجربه بالا شما این جور جاها خودش رو نشون میده

من تقریبا با جستجوهایی که کرده بودم به این کد رسیده بودم اما دو تا تکه کد رو نمیزدم که به مشکل برمیخوردم یکی continue و یکی هم reset آخری به همین دلیل کار نمیکرد

در کل ممنون هستم ازتون و این رو هم که گفتم نمیخواستم اجرتون را ضایع کنم خواستم اشاره ای داشته باشم به تخصص و تجربه تون ، در واقع همین نکات ریز هست که نشون میده یکی کار بلد یک کاری هست یا نه در واقع فوت کوزه گری هست

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

الان با این شرط فقط رکوردهایی که سلکت شدن چاپ میشن من به جای IsSelect همه گزینه ها رو امتحان کردم متاسفانه موق نشدم کد رو به گونه ای تغییر بدم که فقط نمایش اطلاعات در گرید ویو کفایت کنه و نیاز به سلکت کردن نباشه ... ممنون میشم در این رابطه هم راهنمایی کنید

پاسخ در 1395/09/29 توسط
1

سلام دوست عزیز، شما باید سطرها رو بررسی کنید که فیلتر بر روشون اعمال شده یا نه، بعد بر اساس آیتم ها رو داخل یک لیست قرار بدید و به گزارشتون ارسال کنید:

radGridView1.ChildRows[0].IsSelected = true;
پاسخ در 1395/09/26 توسط
0

اساتید بزرگوار خصوصا استاد احمدی عزیز

ممنون میشم راهنمایی کنید تا این مشکل حل بشه ... پروژه ام تموم شده و فقط گیر همین مشکل هستم ..

ممنون

پاسخ در 1395/09/28 توسط
1

شما باید یک لیست جداگانه بسازید، بعد تک تک سطرهای گرید رو داخل یک حلقه for بررسی کنید و داخل لیست رکورد مربوطه رو اضافه کنید و اون لیست رو به عنوان منبع گزارش مشخص کنید.

پاسخ در 1395/09/27 توسط
3

سلام مجدد، ممنون از شما. تا جایی که در خاطرم هست باید از خاصیت ChildRows در گرید استفاده کنید (متاسفانه کنترل های Telerik رو نصب ندارم که تست کنم و ممکنه نیاز باشه کدها کمی تغییر داده بشن)

for (int i = 0; i < dgw.ChildRows.Count; i++)
{
	dt.Rows.Add(dgw.ChildRows[i].Cells[1].Value, dgw.ChildRows[i].Cells[2].Value, dgw.ChildRows[i].Cells[3].Value,
		dgw.ChildRows[i].Cells[4].Value, dgw.ChildRows[i].Cells[5].Value, dgw.ChildRows[i].Cells[6].Value,
		dgw.ChildRows[i].Cells[7].Value, dgw.ChildRows[i].Cells[8].Value);
}
پاسخ در 1395/09/29 توسط
2

ببینید، شما یه Datasource دارید که به Grid بایند میشه، حالا هر سطر از گرید شما ارتباط داره به یکی از آیتم های Data Source. حالا شما باید ببینید که کدوم یکی از سطرهای Grid فیلتر روش اعمال نشده با روش بالا، بعد بیایید اون رکورد رو داخل لیست اضافه کنید. منظورم از لیست Data Table نیست:

var list = new List<Entity>();
 for (int i = 0; i < dgw.Rows.Count; i++)
{
    if(dgw.Rows[i].IsSelected)
    {
        // add record to list
    }
}
StiReport report = new StiReport();
report.Load("RptList.mrt");
report.RegData("DataSource1", list);
report.Show();

به جای entity باید کلاسی که بر اساس اون گزارش ایجاد شده رو بنویسید.

پاسخ در 1395/09/27 توسط
0

سلام و درود

استاد ببخشید ولی من واقعا گیج شدم یعنی درواقع اصلا قاطی کردم

میشه راهنمایی کنید تا به نتیجه نهایی برسم

ابتدا در این قسمت منظورتون اینه که به جای این :

// add record to list

این کد :

            dt.Rows.Add(dgw.Rows[i].Cells[1].Value, dgw.Rows[i].Cells[2].Value, dgw.Rows[i].Cells[3].Value,
            dgw.Rows[i].Cells[4].Value, dgw.Rows[i].Cells[5].Value, dgw.Rows[i].Cells[6].Value,
            dgw.Rows[i].Cells[7].Value, dgw.Rows[i].Cells[8].Value);

رو بگذارم ...؟؟؟

خب به جای entity کلاس چی رو دقیقا باید بگذارم ... ابتدای کدهای همین فرم کلاس رو تعریف کنم ؟؟؟ منظورتون از کلاسی که گزارش بر اساس اون ایجاد شده چی هست؟؟؟

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

از صبر و حوصله شما متشکرم

پاسخ در 1395/09/27 توسط
0

ممنون استاد از توجهتون

ببینید من توی استیمول new data source رو زدم و از گزینه های موجود گزینه data from dataViews رو انتخاب کردم و بعدش تمام ستون هایی که توی جدول دیتابیسم داشتم با همون نام توی استیمول ساختم و دیتا سورس ساخته شده رو انداختم روی صفحه و کل کدی هم که استفاده کردم برای ارسال مقادیر rad grid view این بوده :

            if (dgw.ChildRows[0].IsSelected = true)
            {
            StiReport report = new StiReport();
            report.Load("ReportList.mrt");
            report.RegData("Tbl_Paziresh", dgw.DataSource);
            report.Dictionary.Variables["TarikhJari"].Value = label1.Text;
            report.Dictionary.Variables["SaateJari"].Value = label2.Text;
            report.Show();
            }

که توی دکمه چاپم قرارش دادم ...

نمیدونم روش رو درست انتخاب کردم یا نه اگر نیازه تغییر بدم بگید تا اصلاح کنم البته یک روش دیگه هم بود اونم اینه که بجای data from dataViews از گزینه data from dataSet, dataTables استفاده کنم که توی سی شارپ کدهاش برای ارسال گریدویو به این شکل میشه :

            DataTable dt = new DataTable();
            dt.Columns.Add("Fullname");
            dt.Columns.Add("Aztaraf");
            dt.Columns.Add("Salon");
            dt.Columns.Add("Sooit");
            dt.Columns.Add("Takht");
            dt.Columns.Add("Tarikh");
            dt.Columns.Add("Modat");
            dt.Columns.Add("Hazineh");
            for (int i = 0; i < dgw.Rows.Count; i++)
            {
                dt.Rows.Add(dgw.Rows[i].Cells[1].Value, dgw.Rows[i].Cells[2].Value, dgw.Rows[i].Cells[3].Value,
                    dgw.Rows[i].Cells[4].Value, dgw.Rows[i].Cells[5].Value, dgw.Rows[i].Cells[6].Value,
                    dgw.Rows[i].Cells[7].Value, dgw.Rows[i].Cells[8].Value);
            }
            StiReport report = new StiReport();
            report.Load("RptList.mrt");
            report.RegData("DataSource1", dt);
            report.Reset();
            report.Show();

که باز هم نتیجه همون میشه یعنی هر تغییراتی روی rad grid view اعمال کنم از sort گرفته تا فیلترینگ هیچ کدوم اثربخش نیست و کل اطلاعات بدون تغییر میره برای چاپ

باز هم ممنون از لطفتون

پاسخ در 1395/09/28 توسط
0

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

کاملا کار کرد دقیقا همونی که میخواستم شد ...

موفق باشید در پناه حق

پاسخ در 1395/09/29 توسط
1

ببینید، شما الان مشخص کنید که گزارشتون و بر اساس چه چیزی طراحی کردید؟ Dataset یا Class. بعد بر اساس اون بنده بگم که از Dataset استفاده کنید یا List.

پاسخ در 1395/09/28 توسط
0

ممنون استاد عزیز یه خورده مساله برام مبهم هست ببینید من کدم رو به این شکل عوض کردم میشه باز هم راهنمایی کنید ببینم دقیقا باید چکار کنم چون با وجود تغییرات باز هم انگار اطلاعات موجود در جدول توی بانک بدون تغییر چاپ میشه یعنی نه sort و نه فیلتری که انجام میدم اعمال نمیشه

(لازم به توضیحه سری قبل از طریق dataview کار رو انجام دادم اما این بار از طریق data set,data table )

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

            DataTable dt = new DataTable();
            dt.Columns.Add("Fullname");
            dt.Columns.Add("Aztaraf");
            dt.Columns.Add("Salon");
            dt.Columns.Add("Sooit");
            dt.Columns.Add("Takht");
            dt.Columns.Add("Tarikh");
            dt.Columns.Add("Modat");
            dt.Columns.Add("Hazineh");
            for (int i = 0; i < dgw.Rows.Count; i++)
            {
            dt.Rows.Add(dgw.Rows[i].Cells[1].Value, dgw.Rows[i].Cells[2].Value, dgw.Rows[i].Cells[3].Value,
            dgw.Rows[i].Cells[4].Value, dgw.Rows[i].Cells[5].Value, dgw.Rows[i].Cells[6].Value,
            dgw.Rows[i].Cells[7].Value, dgw.Rows[i].Cells[8].Value);
            }
            StiReport report = new StiReport();
            report.Load("RptList.mrt");
            report.RegData("DataSource1", dt);
            report.Show();

ممنون

پاسخ در 1395/09/27 توسط
4

کد نمایش گزارش رو به صورت زیر تغییر بدید:

DataTable dt = new DataTable();
dt.Columns.Add("Fullname");
dt.Columns.Add("Aztaraf");
dt.Columns.Add("Salon");
dt.Columns.Add("Sooit");
dt.Columns.Add("Takht");
dt.Columns.Add("Tarikh");
dt.Columns.Add("Modat");
dt.Columns.Add("Hazineh");
for (int i = 0; i < dgw.Rows.Count; i++)
{
	if(!dgw.Rows[i].IsSelected)
		continue;
	dt.Rows.Add(dgw.Rows[i].Cells[1].Value, dgw.Rows[i].Cells[2].Value, dgw.Rows[i].Cells[3].Value,
		dgw.Rows[i].Cells[4].Value, dgw.Rows[i].Cells[5].Value, dgw.Rows[i].Cells[6].Value,
		dgw.Rows[i].Cells[7].Value, dgw.Rows[i].Cells[8].Value);
}
StiReport report = new StiReport();
report.Load("RptList.mrt");
report.RegData("DataSource1", dt);
report.Reset();
report.Show();
پاسخ در 1395/09/29 توسط

پاسخ شما