ورود

View Full Version : گزارش گیری در c#



IR_Designer
دوشنبه 28 اردیبهشت 1388, 13:43 عصر
با سلام خدمت دوستان عزیز
مشکلی در C# داشتم میخواستم بدونم بچه ها راه حلی میدونن واسش ؟
طبق تصویر ضمیمه یه فرم هست به شکل زیر که اطلاعات دیتابیس رو توی crystal report نشون میده ولی مشکل اصلی اینجاست که میخوام طوری باشه که هر بخشی که پر بشه گزارش رو از همون بگیره , بطور مثال اگه تاریخ وارد شد کل داده های وارد شده طی همون تاریخ رو نشون بده و اگه " نام " وارد شد تمام داده های وارد شده بر حسب همان نام , اگر " تاریخ و نام " هم بود تمام داده های نسبت به اون تاریخ و نام رو نمایش بده . بطور معمول با دستور select حتما باید تمامی فیلد های هر گزارش پر بشه تا گزارش مربوطه رو نمایش بده .
ممنون میشم دوستان کمک کنن یا منبعی برای این مشکل پیدا کنند :متفکر:

adinochestva
دوشنبه 28 اردیبهشت 1388, 13:51 عصر
ديتا رو چجوري به گزارش پاس مي كني ؟
اگه datatable هست رو defaultview شرط بزار و بعد اونو پاس كن

IR_Designer
دوشنبه 28 اردیبهشت 1388, 14:14 عصر
از datatable استفاده نمی کنم , مقادیر که توی table ذخیره شده و گزارش رو هم با query و دستور select انجام میشه .
اگه لطف کنید راه حل رو بصورت ساده تر و مفهومی بگین چه بهتر , آخه اول راهیم.:متفکر:

adinochestva
دوشنبه 28 اردیبهشت 1388, 14:21 عصر
خوب اگر با select هست مي توني توي بخش where كوريت شرط رو اضافه كني

happy65_sh
دوشنبه 28 اردیبهشت 1388, 14:25 عصر
if(CheckBoxdate.Checked)
query = "select myval from mytable where date between @startdate and @enddate;"
else if ...
your Query
else if ...
Your Query
SqlDataAdapter da = newSqlDataAdapter (query , connection)
da.SelectCommand.Parameters.AddWithValue("@startdate", startdate.text);
da.SelectCommand.Parameters.AddWithValue("@enddate", enddate.text);
DataSet ds = New DataSet()
da.Fill(ds);
mycristalreport.SetDataSourse(ds.Tables[0]);
mycristalreportviewer.ReportSourse = mycristalreport;

IR_Designer
دوشنبه 28 اردیبهشت 1388, 19:08 عصر
با توجه به وجود 10 فیلد مختلف برای گزارشگیری با این وجود باید کلی if بخوره ( چیزی حدود 100 تا if ).
چک باکس ها هم کار Enable/Disable کردن فیلد ها رو انجام میده .
مگه نمیشه گرفتن Query رو طوری تنظیم کرد که فیلد های خالی و یا دارای "*" عمل فیلتر گذاری رو در گزارش انجام ندن.
یا اصلا بطور عادی دستور اصلی گرفتن کل داده ها + فیلتر ها باشه , بطور مثال تاریخ ها و بقیه فیلد ها رو اعمال کنه .
هم اکنون از سیستم گزارش گیری به شکل زیر استفاده میشه :
Query:

SELECT nam_rannande, cod_rannande, shomare_kamion, meghdar, mahle_takhlie, mahle_ejra, shomare_ghabz, tarikh, no_kala_vooroo_khoorooj
FROM Table_sabt_ghabz
WHERE (tarikh >= @t_sefaresh_start) AND (tarikh <= @t_sefaresh_end) AND (nam_rannande = @namrannande) AND (shomare_kamion = @shomarekamion)

دستور select :

if (textBox11.Text != "")
{
table_sabt_ghabzTableAdapter.select_ra_shomare_tar ikh(database1_sabt_ghabz_tDataSet1.Table_sabt_ghab z, maskedTextBox1.Text, maskedTextBox4.Text, textBox11.Text, Convert.ToInt32(textBox12.Text));
gozareshat.CrystalReport_ra_shomare print = new anbar.gozareshat.CrystalReport_ra_shomare();
print.SetDataSource(database1_sabt_ghabz_tDataSet1 );
crystalReportViewer1.ReportSource = print;

}
else
MessageBox.Show("نام راننده را وارد کنيد");

adinochestva
دوشنبه 28 اردیبهشت 1388, 19:18 عصر
بزارشون تو يك panel و بعد كل كنترلهاي panel رو چرخ بزن اونا كه مقدار دارن و اسم فيلدشون تو ديتابيس كه تو tag ميريزي رو بخون و query رو درست كن !

IR_Designer
سه شنبه 29 اردیبهشت 1388, 16:46 عصر
از اینکه راهنمایی کردین ممنونم ، اما چیزی ازش نفهمیدم :ناراحت:
میشه یه نمونه بزنین و آپلود کنین ، فکر کنم این جوری قضیه تموم شه :متفکر:
بازم ازتون ممنونم

IR_Designer
پنج شنبه 31 اردیبهشت 1388, 18:28 عصر
یعنی تو #C راهی واسه همچین کاری نیست ؟

IR_Designer
جمعه 01 خرداد 1388, 11:56 صبح
بزارشون تو يك panel و بعد كل كنترلهاي panel رو چرخ بزن اونا كه مقدار دارن و اسم فيلدشون تو ديتابيس كه تو tag ميريزي رو بخون و query رو درست كن !
مقدار و فیلد ها رو چطور تو تگ میریزی ، اصلا تگ کجاست ؟ :افسرده:
یا شاید بشه گفت نحوه اجرای کوئری آنلاین :متفکر:

adinochestva
جمعه 01 خرداد 1388, 14:36 عصر
فرض کن یک textbox داری که شرط CustomerName رو ذخیره می کنه با کد زیر اسم فیلد شرط را به تگ textbox نسبت بده :


textbox1.Tage = "CustomerName";
اگر این textbox تو یک panel باشه می تونی تو controls های اون panel بچرخی با این صورت


string sqlWhere=string.Empty;
foreach ctrl in Panel1.Controls
{
if ( ctrl is TextBox)
if (!string.IsNullOrEmpty(ctrl.Text))
sqlWhere += ctrl.Tag.ToString() + " = \"" + ctrl.Text+"\"";
}
با کد بالا اگر n تا textbox با تگ های مختلف در panel اضافه کنی اگر کاربر در آن textbox ها چیزی وارد کنه تو sqlWhere اون شرط اضافه می شه به این صورت :
CustomerName = "Ali"

Mohammad6767
جمعه 01 خرداد 1388, 16:54 عصر
هنگام اتصال از طریق سی شارپ به SqlُServer2000 در کامپیوتر دیگر با این خطا مواجه می شوم

An error has occurred while establishing a connection to the server. When connecting to SQL Server
2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server