PDA

View Full Version : سوال: نحوه خواندن و جستجو در بانک های حجیم و نمایش با کریستال ریپورت ، با استفاده از بک گراند ورکر



behnam-soft
دوشنبه 15 مهر 1392, 20:54 عصر
سلام خدمت دوستان عزیز.
در برنامه ای که من نوشتم، کاربر زمانی که بر روی دکمه چاپ کلیک می کنه، تقریبا یه 30 الی 40 ثانیه طول میکشه تا یه فرم که از نوع کریستال ریپورت هست، به نمایش در بیاد، که در این مدت، برنامه در حالت هنگ هستش، که البته این مشکل با استفاده از بک گراند ورکر حل شد، اما در این 30 الی 40 ثانیه، من می خوام از یه پروگرس بار استفاده کنم تا کاربر متوجه بشه برنامه داره یه کاری رو انجام می ده و کلا اینکه خب اینکار، جلوه خوبی به برنامه میده.اما مشکل اینجاست که نمی دونم چطور باید به پروگرس بار مقدار بدم که مثلا اگه 50 درصد کار نمایش کریستال ریپورت انجام شده، تو هم نصف پروگرس بارت رو پر کن....

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

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

esafb52
دوشنبه 15 مهر 1392, 21:57 عصر
بفرما

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


namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string[] s = Directory.GetFiles("k:\\mp3","*.*",SearchOption.AllDirectories);
this.BeginInvoke((MethodInvoker)delegate { progressBar1.Maximum = s.Length; });
int a=0;
foreach (string item in s)
{

backgroundWorker1.ReportProgress(a++, item);
this.BeginInvoke((MethodInvoker)delegate { label1.Text = a.ToString(); });
Thread.Sleep(50);
}

}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
this.Text = e.UserState.ToString();
listBox1.Items.Add(e.UserState);
}

private void Form1_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
progressBar1.Value = progressBar1.Maximum;
}
}
}

behnam-soft
سه شنبه 16 مهر 1392, 08:06 صبح
با تشكر از توجه شما دوست عزيز، كدي كه شما نوشتين اگر اشتباه نكنم براي كار با فايل هاست، اما من مي خوام كه از اين روش براي پر كردن ديتا تيبل استفاده كنم !!! كجاي اين كد ها رو بايد تغيير بدم؟ البته ببخشيد اگر سوالم خيلي مبتديانه ست !

behnam-soft
سه شنبه 16 مهر 1392, 19:43 عصر
همچنان منتظر !!!

behnam-soft
پنج شنبه 18 مهر 1392, 10:49 صبح
دوستان کسی واقعا بلدنیست اینکار رو باید چطور انجام داد؟

khokhan
پنج شنبه 18 مهر 1392, 13:16 عصر
دوستان کسی واقعا بلدنیست اینکار رو باید چطور انجام داد؟

.................................................. .............................:لبخند::چشمک :

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

namespace myCryst
{
public partial class Form1 : Form
{
DataSet ds;
frmCryst f = new frmCryst();
public Form1()
{
InitializeComponent();
}

private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
bgWorker.ReportProgress(10);
Thread.Sleep(164);
bgWorker.ReportProgress(20);
Thread.Sleep(164);
bgWorker.ReportProgress(30);
Thread.Sleep(164);
ds = DBClass.ExecQuery("select * from students");
bgWorker.ReportProgress(40);
Thread.Sleep(164);
bgWorker.ReportProgress(50);
Thread.Sleep(164);
bgWorker.ReportProgress(70);
Thread.Sleep(164);
bgWorker.ReportProgress(95);
Thread.Sleep(164);
bgWorker.ReportProgress(100);
}
private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.progressBar1.Value = e.ProgressPercentage;
}
private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
showCrystalReport();
}
private void button1_Click(object sender, EventArgs e)
{
bgWorker.ProgressChanged += new ProgressChangedEventHandler(bgWorker_ProgressChang ed);
bgWorker.WorkerReportsProgress = true;
bgWorker.RunWorkerAsync();
}
private void showCrystalReport()
{
CrystalReport1 c = new CrystalReport1();
Reportds d = new Reportds();
d.Tables[0].Merge(ds.Tables["tab"]);
frmCryst f = new frmCryst();
c.SetDataSource(d);
f.crystRep.ReportSource = c;
f.Show();
}
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}


111717