PDA

View Full Version : مبتدی: نحوه ویرایش فاکتور در دیتاگریدویو



hashtgerd2
شنبه 14 دی 1392, 06:47 صبح
من می خوام واسه برنامه م ویرایش فاکتور درست کنم.. لطفا راهنمایی کنید از چه روشی استفاده کنم
یه فرم دارم که خلاصه فاکتور ها رو نشان میده یه فرم هم دارم که جزئیات هر فاکتور رو نشون میده
تو فرم جزئیات دیتاگریدویو همه ی رکوردهای جدول جزئیات که دارای شماره فاکتور انتخاب شده هستند رو نشون میده . حالا می خوام کاربر مثلا اگه یه رکورد رو حذف کرد یا تعداد اقلام یا درصد تخفیف رو تغییر داد تو بانک هم اعمال بشه. از کجا بفهمم که چه چیزایی تغییر کرده و در هنگام ثبت باید محاسبه و اعمال بشه
فرم جزئیات رو ضمیمه کردم

pooria_googooli
شنبه 14 دی 1392, 17:26 عصر
می تونی از دیتا ست استفاده کنی . یعنی اون جدول را به یه دیتا ست وصل کنی و تغییرات را توی دیتا تیبل بدی . خودش نهایتا برات تغییرات را ثبت میکنه . یا اینکه میتونی بیای کل داده های اون فاکتور را پاک کنی از اول insert کنی .

sagggad
شنبه 14 دی 1392, 17:43 عصر
از همون ابتدا گرید ویو رو به بانک مقید کن...بعد میتونی با سه خط کد اون ها رو ذخیره کنی...

fmehrvarzi
شنبه 14 دی 1392, 18:04 عصر
شما باید از Binding Source استفاده کنید و یا از دیتا ویو
برا بایندینگ سورس به این لینک مراجعه کنید کامل توضیح داده (خلاصه بگم: دیتا گریدت عین عین دیتا ستت میشه) اینم لینک توضیحش Binding Source (http://msdn.microsoft.com/en-us/library/fbk67b6z.aspx)

دیتا ویو هم مثل بالایی همین کار رو انجام میده ، چون تغییرات را در دیتا ست اعمال میکنه و بعدش دستور آپدیت را استفاده کن تا تغییرات به دیتابیس منتقل بشه
این هم کدهای دیتاویو
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

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

private void button1_Click(object sender, EventArgs e)
{
string connetionString = null;
SqlConnection connection ;
SqlCommand command ;
SqlDataAdapter adapter = new SqlDataAdapter();
DataSet ds = new DataSet();
DataView dv ;
string sql = null;
connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password";
sql = "Select * from product";
connection = new SqlConnection(connetionString);
try
{
connection.Open();
command = new SqlCommand(sql, connection);
adapter.SelectCommand = command;
adapter.Fill(ds, "Create DataView");

command.Dispose();
connection.Close();

dv = ds.Tables[0].DefaultView;

dataGridView1.DataSource = dv;
}
catch (Exception ex)
{
MessageBox.Show (ex.ToString());
}
}
}
}

و تو رویداد باتن save این کد رو قرار بده
adapter.Update(ds, "Create DataView");

sagggad
شنبه 14 دی 1392, 19:08 عصر
دوست عزیز فک نکنم احتیاجی به کدهای انقدر طولانی باشه...:متعجب:

hashtgerd2
شنبه 14 دی 1392, 19:15 عصر
اگه بیام کل داده های اون فاکتور رو پاک کنم دوباره بریزم محاسبات(جمع فاکتور، حساب مشتری، تعداد کالا، کم کردن کالا ها از انبار و غیره) رو فقط از طریق این اطلاعات جدید میشه ثبت کرد. یعنی مثلا یک رکورد رو طرف پاک کرد یه کالای دیگه اضافه کرد خب از کجا بفهمم باید جوری باشه که کاربر هر داده ای رو تغییر داد متوجه بشیم و حساب کتاب ها (جمع فاکتور، حساب مشتری، تعداد کالا، کم کردن کالا ها از انبار و غیره) رو دوباره انجام بدیم
دیتاست هم خب همین میشه فقط اطلاعات قبلی از بین میره جدیده میاد تو جدول می شینه ولی حساب کتاب فاکتور رو چه جوری تغییر بدیم

hashtgerd2
شنبه 14 دی 1392, 19:19 عصر
اگه بخوایم دیتاگرید رو اپدیت کنیم بعد داده ها رو باید دوباره محاسبه کنیم ولی مقدار های قبلی تاثیر دارند. فرض کن تو یه فاکتور کالای 1 رو 10 تا فروختیم
الان از انبار 10 تا کم شده حالا کاربر تو ویرایش کالا رو که تعدادش 10 هست رو تغییر میده میکنه 5 خب چه جوری می خوای بفهمیم.اگه بیام دوباره فاکتور رو بر اساس این 5 عدد بسازیم و در جدول بنشونیم که خب حساب کتاب ها بهم میریزه پس 5 تایی که این وسط از بین رفت چی میشه؟

hashtgerd2
شنبه 14 دی 1392, 19:21 عصر
دوست عزیر تو ویرایش فاکتور مقادیر قبلی مهم هستش مانده حساب، تعداد کالا های انبار ، کالای جدید و یا حذف شده از فاکتور
این کد فقط کل رکوردهای فاکتور جدید رو جایگزین قبلی می کنه

hashtgerd2
شنبه 14 دی 1392, 19:25 عصر
کد من موقع محاسبه فاکتور و ثبت فاکتور فروش به این شکل هست که می اد رکوردهای دیتاگرید ویو رو محاسبه میکنه و جمع فاکتور و غیره رو محاسبه میکنه و در جدول ثبت میکنه


//////محاسبه مجموع هر رديف
int majmurow = 0;

majmurow += Int32.Parse(dataGridView1.CurrentRow.Cells["colUnitPrice"].Value.ToString()) * Int32.Parse(dataGridView1.CurrentRow.Cells["colTedad"].Value.ToString());
lblpriceAll.Text = majmurow.ToString();
dataGridView1.EndEdit();

//////محاسبه ميانگين درصد تخفيف
int majmudiscount = 0;
for (int i = 0; i < dataGridView1.RowCount; i++)
{
majmudiscount += Int32.Parse(dataGridView1.Rows[i].Cells["coldiscount"].Value.ToString());
}
int tempp = (majmudiscount / (Int32.Parse(dataGridView1.RowCount.ToString())));
lblDiscount.Text = tempp.ToString();
//////
dataGridView1.EndEdit();
//////محاسبه مجموع فاكتور
int majmuFactor = 0;
for (int i = 0; i < dataGridView1.RowCount; i++)
{
majmuFactor += Int32.Parse(dataGridView1.Rows[i].Cells["colUnitPrice"].Value.ToString()) * Int32.Parse(dataGridView1.Rows[i].Cells["colTedad"].Value.ToString());
}
lblpriceAll.Text = majmuFactor.ToString();
dataGridView1.EndEdit();
//////محاسبه مجموع پرداختي فاكتور
int majmuPardakhtFactor = 0;
for (int i = 0; i < dataGridView1.RowCount; i++)
{
majmuPardakhtFactor += Int32.Parse(dataGridView1.Rows[i].Cells["colmajmu"].Value.ToString());
}
lblMajmuePardakht.Text = majmuPardakhtFactor.ToString();
//////

numTedad = 0;
for (int i = 0; i < dataGridView1.RowCount; i++)
{
numTedad += Int32.Parse(dataGridView1.Rows[i].Cells["coltedad"].Value.ToString());
}
lblCount.Text = numTedad.ToString();

private void btnSabtFaktorKHarid_Click(object sender, EventArgs e)
{
cmd.Connection = objConnection;
objConnection.Open();
cmd.CommandText = "select max(rd_ID) from recipientdetail";
int rd_ID_temp = Int32.Parse(cmd.ExecuteScalar().ToString());
rd_ID_temp += 1;

cmd.CommandText = "select max(r_ID) from recipient";
int r_ID_temp = Int32.Parse(cmd.ExecuteScalar().ToString());
r_ID_temp += 1;

int tedad = Int32.Parse(txtkharidTedad.Text);
int jeen_ID = Int32.Parse(lblJeen_ID.Text);

//cmd.CommandText = "insert into paymentdetail(pd_ID,jeen_ID,tedad,discount,majmu) values(@pd_IDD,@jeen_ID,@tedad,@discount,@majmu)";
//cmd.Parameters.AddWithValue("@pd_IDD", pd_ID_temp);
for (int i = 0; i < dataGridView1.RowCount; i++)
{
cmd.CommandText = "insert into recipientdetail(rd_ID,jeen_ID,tedad,unitprice,disc ount,majmu) values(" +
rd_ID_temp + "," +
dataGridView1.Rows[i].Cells["colcode"].Value + "," +
dataGridView1.Rows[i].Cells["coltedad"].Value + "," +
dataGridView1.Rows[i].Cells["colunitprice"].Value + "," +
dataGridView1.Rows[i].Cells["coldiscount"].Value + "," +
dataGridView1.Rows[i].Cells["colmajmu"].Value + ")";


cmd.ExecuteNonQuery();
cmd.CommandText = "UPDATE anbar SET tedad=tedad-" + dataGridView1.Rows[i].Cells["coltedad"].Value + " WHERE (jeen_ID =" + dataGridView1.Rows[i].Cells["colcode"].Value + ")";
cmd.ExecuteNonQuery();
}

cmd.CommandText = "UPDATE customer SET c_Taraz=c_Taraz-" + lblMajmuePardakht.Text + " WHERE (c_ID =" + lblC_ID.Text + ")";
cmd.ExecuteNonQuery();
DateTime miladitotal = DateTime.Now;
string converted = MyTools.MiladiToShamsi(System.DateTime.Now);
cmd.CommandText = "insert into recipient(r_ID,r_Date,c_ID,totalprice,rd_ID,totalM ustpay,r_Comment,r_tedad) values('" + r_ID_temp + "','" + converted+ "','" + lblC_ID.Text + "','" + lblpriceAll.Text + "','" + rd_ID_temp + "','" + lblMajmuePardakht.Text + "','" + txtRecipientComment.Text +"','"+numTedad+ "')";
cmd.ExecuteNonQuery();

MessageBox.Show("فاكتور فروش ثبت شد", "ثبت شد", MessageBoxButtons.OK);
objConnection.Close();
this.Close();
}