PDA

View Full Version : سوال: درج اخرین فیلد در گزارشگیری



vB.N3T
پنج شنبه 17 دی 1394, 16:28 عصر
سلام مهندیسن گل و عزیز

برنامه مبلغی رو از شخص دریافت میکنه و میخام بعد از دریافت ته چک پرینت بگیریم
چطور میتونم برای استیمول کوئری بنویسم

یه روشی که انجام دادم و کار امد نبود به این صورت بود
public StiReport reporrt = new StiReport();
public void regdata(StiReport report)
{
var db = new DataClasses1DataContext();
using (DataClasses1DataContext nn = new DataClasses1DataContext())
{
var Qselect = from s in nn.Tbl_dareyaftis
select new { s.Name, s.Price, s.vaziat, s.date };
report.RegData("Qselect", Qselect);


}

}
private void button1_Click(object sender, EventArgs e)
{
reporrt.Load("\\report.mrt");
regdata(reporrt);
reporrt.Show();
}
بعد از دریافت مبلغ یه سلکت از جدول دریافتی زدم و فرستادم به تابع ریپورت
که در این صورت کل دریافتی ها میره داخل گزارشگیری
میخام اخرین فیلد جدول بره برای گزارشگیری
ممنون میشم راهنمایی کنید

Mahmoud.Afrad
پنج شنبه 17 دی 1394, 19:13 عصر
اگر بعد از insert ، پرینت باید انجام بشه کافیه بعد از Insert شئ Tbl_dareyafti رو به گزارش بفرستی. یا اینکه با متد FirstOrDefault و یا هر متد دیگری شئ رو سلکت کنی بعد ارسال کنی.

vB.N3T
پنج شنبه 17 دی 1394, 23:23 عصر
اقا افراد با این دستور خواستم اخرین رکورد سلکت کنم ولی اجرا نشد

var select = (from s in db.Tbl_dareyaftis select s).LastOrDefault();
dataGridView1.DataSource = select;

و این
var a = new DataClasses1DataContext();
var student = a.Tbl_dareyaftis.OrderByDescending(s => s.id).FirstOrDefault();
dataGridView1.DataSource = student;

ژیار رحیمی
جمعه 18 دی 1394, 02:41 صبح
اقا افراد با این دستور خواستم اخرین رکورد سلکت کنم ولی اجرا نشد

var select = (from s in db.Tbl_dareyaftis select s).LastOrDefault();
dataGridView1.DataSource = select;

و این
var a = new DataClasses1DataContext();
var student = a.Tbl_dareyaftis.OrderByDescending(s => s.id).FirstOrDefault();
dataGridView1.DataSource = student;

دوست گرامی روش گرفتن آخرین رکود روش مناسبی برای یافتن رکورد درج شده نیست.جناب افراد راهنمایی لازم رو کردن.شما هم میتونی شی رو بفرستی به تابع یا Id
شما کافیست Id رکورد درج شده رو یه متغییر نگهداری و بعد در Select کردن بر اساس Id رکورد رو پیدا کنی


int id ;



nn.Tbl_dareyaftis.InsertOnSubmit(myObject);
nn.SubmitChanges();


id = myObject.ID;


کویری select کردن داخل تابع regdata

var Qselect = nn.Tbl_dareyaftis.Where(c=>c.Id==id).Select(s=> new { s.Name, s.Price, s.vaziat, s.date });


روش دوم طبق راهنمایی جناب افراد( بصورت متغییر سراسری در سطح فرم یا میتونی شی رو به تابع regdata بفرستی)


Tbl_dareyafti myObject ;



myObject=new Tbl_dareyafti();
//...
//...
nn.Tbl_dareyaftis.InsertOnSubmit(myObject);
nn.SubmitChanges();

داخل تابع regdata

report.RegData("Qselect", myObject);

Mahmoud.Afrad
جمعه 18 دی 1394, 02:42 صبح
به جای FirstOrDefault از Take(1) استفاده کن.

حالا چرا آخرین رکورد؟ اگر دیتابیس روی شبکه قرار بگیره، از کجا مطمئن هستید آخرین رکورد همون رکورد مورد نظر شما هست؟
مگر نگفتید بعد از ثبت مبلغ میخواهید رسید بدید، خب بلافاصله بعد از ثبت گزارش رو ایجاد کنید. اگر همینو میخواهی کد insert رو بزار راهنمایی کنم.

vB.N3T
جمعه 18 دی 1394, 03:05 صبح
واقعا تشکر میکنم از دو مدیر لایق این انجمن با راهنمایی هایی این بزرگواران مشکل حل شد :قلب:

اقا افراد برنامه رو یه سیستم قرار میگیره چون تا به حال با linq گزارشگیری نکردم.میخاستم اخرین رکورد رو بفرستم به گزارش

vB.N3T
جمعه 18 دی 1394, 03:17 صبح
کد ها رو میزارم تاپیک نتیجه گیری داشته باشه برای دوستان گلی که در اینده به این تاپیک سر میزنن

کد هایی درج در بانک بعد از درج گزارشگیری انجام میشه

Tbl_dareyafti nw = new Tbl_dareyafti();
if (string.IsNullOrWhiteSpace(lab_price.Text))
errorProvider1.SetError(lab_price, "مبلغ رامحاسبه کنید");
var select_p = from s in db.Tbl_dareyaftis where s.date == combo_Date.Text && s.Name == comboo_name.Text select s;
if (select_p.Count() > 0)
{
MessageBox.Show("نام انتخاب شده. در تاریخ انتخاب شده. پرداخت را انجام داده است","پیغام",MessageBoxButtons.OK,MessageBoxIcon.Stop);
}
else
{
nw.date = combo_Date.Text;
nw.Name = comboo_name.Text;
nw.Price = lab_price.Text;
nw.vaziat = "پرداخت شده";
nw.id_p = int.Parse(txtid.Text);
db.Tbl_dareyaftis.InsertOnSubmit(nw);
db.SubmitChanges();
resultid = nw.id;
MessageBox.Show("اطلاعات با موفقیت ثبت شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
utility.MyTextBoxes(this, "Clear");
report.Load("\\report.mrt");
regdataa(report);
report.Show();
}

کد هایی مربوط به ریپورت

public StiReport report = new StiReport();
public void regdataa(StiReport report)
{
var db = new DataClasses1DataContext();
using (DataClasses1DataContext nn = new DataClasses1DataContext())
{
var Qselect = nn.Tbl_dareyaftis.Where(c => c.id == resultid).Select(s => new { s.Name, s.Price, s.vaziat, s.date });
report.RegData("Qselect", Qselect);


}

}

Mahmoud.Afrad
جمعه 18 دی 1394, 03:31 صبح
درسته ، ولی اگر من باشم دیگه کوئری برای سلکت نمیزنم چون شئ nw رو دارم دیگه! کافیه این شئ رو به گزارش بفرستم پس به متد regdataa و متغیر resultid هم نیازی نیست.
به اینصورت

//...
db.SubmitChanges();
MessageBox.Show("اطلاعات با موفقیت ثبت شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
utility.MyTextBoxes(this, "Clear");
report.Load("\\report.mrt");
report.RegData("Qselect", nw);
report.Show();

کافیه دیتاسورس Qselect درون گزارش از نوع کلاس Tbl_dareyafti باشه.


تست کن نتیجه رو بگو.

vB.N3T
جمعه 18 دی 1394, 19:22 عصر
کاملا جواب داد جناب افراد با کوئری که گفتید