?? selltable.cs
字號:
//------------向【業務員】下拉列表框中添加下拉選項------------
private void selectDataBase()
{
this.txt_SellDate.Text = System.DateTime.Today.ToShortDateString();
string tempStrSQL = "select distinct 姓名 from 用戶清單 ";
DataTable tempDataTable = link.SelectDataBase(tempStrSQL);
for (int i=0;i<tempDataTable.Rows.Count;i++)
this.cmb_Oprater.Items.Add(tempDataTable.Rows[i][0]);
this.cmb_Oprater.SelectedIndex = 0;
}
//----------綁定數據并設置明細表格各列的屬性----------
private void DataGridStateControl()
{
newTable = new DataTable();
newTable.Columns.Add("貨號(雙擊)",typeof(string));
newTable.Columns.Add("數量",typeof(decimal));
newTable.Columns.Add("單價",typeof(decimal));
newTable.Columns.Add("倉庫(雙擊)",typeof(string));
newTable.Columns.Add("品名",typeof(string));
newTable.Columns.Add("單位",typeof(string));
newTable.Columns.Add("金額",typeof(decimal),"數量*單價");
newTable.Columns.Add("稅率",typeof(decimal));
newTable.Columns.Add("不含稅額",typeof(decimal),"金額/1.17");
newTable.Columns.Add("稅額",typeof(decimal),"金額-不含稅額");
this.dgrd_SellTable.DataSource = newTable;
newTable.Rows.Add(newTable.NewRow()); //向表中添加一行
DataGridTableStyle ts = new DataGridTableStyle();
DataGridTextBoxColumn aColumnTextColumn;
ts.AllowSorting = false;
ts.AlternatingBackColor = Color.LightGray;
ts.MappingName = newTable.TableName;
int numCols = newTable.Columns.Count;
for (int i = 0;i< numCols;i++)
{
aColumnTextColumn = new DataGridTextBoxColumn();
if( i!=0 && i!=1 && i!=2 && i!=3)//表中只允許編輯【數量】和【單價】兩個字段
{
aColumnTextColumn.ReadOnly=true;
}
if ( i == 0 || i == 3 )//當鼠標單擊第0列和第3列時,允許響應
{
aColumnTextColumn.TextBox.MouseDown += new MouseEventHandler(TextBoxMouseDownHandler);
}
if ( i == 4 )
{
aColumnTextColumn.Width = 160;
}
aColumnTextColumn.MappingName = newTable.Columns[i].ColumnName;
aColumnTextColumn.HeaderText = newTable.Columns[i].ColumnName;
aColumnTextColumn.NullText = "";
aColumnTextColumn.Format = "N"; //設置為數字格式顯示
ts.GridColumnStyles.Add(aColumnTextColumn);
}
this.dgrd_SellTable.TableStyles.Add(ts);
}
//-----------處理保存修改,刪除和存入歷史等功能---------
private void toolBar1_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if (e.Button.ToolTipText == "保存修改")
{
clickedSaveIcon();
}
else if(e.Button.ToolTipText == "刪除數據")
{
try
{
if (newTable.Rows.Count > 0)
{
this.newTable.Rows.RemoveAt(this.dgrd_SellTable.CurrentCell.RowNumber);
this.controlCalculate();
}
//加入空行保證newTable中不為空,否則刪除所有數據行后保存數據和MouseUp函數將引發異常出錯
if (newTable.Rows.Count-1 <= 0)
newTable.Rows.Add(newTable.NewRow());
}
catch
{
return;
}
}
else if (e.Button.ToolTipText == "存入歷史")
{
clickedTrashIcon();
}
}
//----------創建窗體,共用戶選擇客戶----------
private void cmb_Client_DropDown(object sender, System.EventArgs e)
{
ClientDataManage newFrm = new ClientDataManage(false);
newFrm.setDataGridReadOnly();
newFrm.ShowDialog();
setTextData();
SendKeys.Send("{Tab}");//向活動應用程序發送Tab鍵,跳到下一控件
}
//--------將所選客戶的相關數據讀入窗體---------
private void cmb_Client_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
this.txt_Company.Text = "";
string strSearchWord = this.cmb_ClientID.Text;
string sendSQL = "select 客戶編號,名稱 from 客戶清單 where 客戶編號 = '" + strSearchWord + "'";
DataTable tempDataTable = this.link.SelectDataBase(sendSQL);
if (tempDataTable.Rows.Count>0)
{
inputTextDataArray[0] = tempDataTable.Rows[0][0].ToString().Trim();
inputTextDataArray[1] = tempDataTable.Rows[0][1].ToString().Trim();
this.setTextData();
SendKeys.Send("{Tab}");//向活動應用程序發送Tab鍵,跳到下一控件
}
}
private void dgrd_SellTable_DoubleClick(object sender, System.EventArgs e)
{
this.doubleClicked();
}
private void dgrd_SellTable_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
//獲取當前點擊鼠標時的時間
DataGrid myGrid = (DataGrid)sender;
System.Windows.Forms.DataGrid.HitTestInfo myHitTest;
// Use the DataGrid control's HitTest method with the x and y properties.
myHitTest = this.dgrd_SellTable.HitTest(e.X,e.Y);
if ( myHitTest.Type == System.Windows.Forms.DataGrid.HitTestType.Cell )
gridMouseDownTime = DateTime.Now;
}
private void dgrd_SellTable_CurrentCellChanged(object sender, System.EventArgs e)
{
this.selectWareMessage();
this.controlCalculate();
}
//------------處理鼠標在dataGrid上的單擊事件-----------
private void TextBoxMouseDownHandler(object sender, MouseEventArgs e )
{
//第一個判斷條件:在單元格的textbox中的雙擊(即單擊DataCell,使它獲得焦點后,然后再響應該Cell中的雙擊事件)
//第二個判斷條件:DataGrid 的 DoubleClick(直接雙擊Cell就響應雙擊事件,無須先單擊Cell,使它獲得焦點,然后再響應雙擊事件)
//判斷時間間隔是否小于控制面板中所定義的雙擊間隔時間
if( e.Button == MouseButtons.Left && e.Clicks == 2 || DateTime.Now < gridMouseDownTime.AddMilliseconds(SystemInformation.DoubleClickTime))
{
this.doubleClicked();
}
}
//------------在表格中雙擊,創建窗體以供選擇貨物或選擇倉庫-------------
private void doubleClicked()
{
if (this.dgrd_SellTable.CurrentCell.ColumnNumber == 0 )//若鼠標單擊的是第一列,則為選擇貨物
{
this.dgrd_SellTable[dgrd_SellTable.CurrentCell.RowNumber,3] = inputDataGridArray[3] = "";
WareDataManage newFrm = new WareDataManage(false);
newFrm.setDataGridReadOnly(true);
newFrm.ShowDialog();
setWareData();
SendKeys.Send("{Tab}");//向活動應用程序發送Tab鍵,跳到下一控件(此處為下一格)
}
if (this.dgrd_SellTable.CurrentCell.ColumnNumber == 3)//選擇倉庫
{
string sendStrSQL = "select 倉庫,庫存數量 from 庫存庫 where 貨號 = '" + dgrd_SellTable[dgrd_SellTable.CurrentCell.RowNumber,0].ToString().Trim() + "' order by 倉庫 ASC";
SelectStorage newFrm = new SelectStorage(sendStrSQL);
newFrm.ShowDialog();
setStorageData();
//賦值完畢后跳向下一行
this.dgrd_SellTable.CurrentCell = new DataGridCell(this.dgrd_SellTable.CurrentCell.ColumnNumber+1,0);
}
}
//--------------向數據庫提交數據--------------
private void clickedSaveIcon()
{
try
{
//注意:必須先刪除進貨單明細表中的數據,然后才能再刪除進貨單中的數據
string sendSQL = "delete 銷售單明細";
this.link.UpdateDataBase(sendSQL); //刪除進貨單明細中的數據
sendSQL = "delete 銷售單";
this.link.UpdateDataBase(sendSQL); //刪除進貨單中的數據
//向銷售單中寫入數據
int intMaxSellNumberID= 0;
sendSQL = "select 編號 from 銷售單歷史";
//從銷售單明細中讀取"編號"列,取它的最大值,以便為新添加的數據編號
DataTable intNumberTable = this.link.SelectDataBase(sendSQL);
for (int i=0;i<intNumberTable.Rows.Count;i++)
{
if (intMaxSellNumberID < System.Int32.Parse(intNumberTable.Rows[i][0].ToString()))
{
intMaxSellNumberID = System.Int32.Parse(intNumberTable.Rows[i][0].ToString());
}
}
sendSQL = "select 編號 from 銷售單";
//從銷售單明細中讀取"編號"列,取它的最大值,以便為新添加的數據編號
intNumberTable = this.link.SelectDataBase(sendSQL);
for (int i=0;i<intNumberTable.Rows.Count;i++)
{
if (intMaxSellNumberID < System.Int32.Parse(intNumberTable.Rows[i][0].ToString()))
{
intMaxSellNumberID = System.Int32.Parse(intNumberTable.Rows[i][0].ToString());
}
}
intMaxSellNumberID++;
string strClientID = this.cmb_ClientID.Items[0].ToString().Trim();
string strSellDate = this.txt_SellDate.Text.Trim();
string strOperator = this.cmb_Oprater.SelectedItem.ToString().Trim();
string strMaker = this.txt_Maker.Text.Trim();
decimal decTotalCount = Decimal.Parse(this.txt_TotalCount.Text.Trim());
decimal decNoTax = Decimal.Parse(this.txt_NoTax.Text.Trim());
decimal decTax =Decimal.Parse(this.txt_Tax.Text.Trim());
string sendValues = "('" + intMaxSellNumberID +"','"+ strClientID +"','"+ strSellDate +"','"+ strOperator +"','"+
strMaker +"','"+ decTotalCount +"','"+ decNoTax +"','"+ decTax + "')";
sendSQL = "insert 銷售單 (編號,客戶編號,銷售日期,業務員,制單人,稅價合計,不含稅價,稅額) values " + sendValues;
this.link.UpdateDataBase(sendSQL);
//向銷售單明細中寫入數據
int intMaxNumberID = 0;
sendSQL = "select 編號 from 銷售單明細歷史";
//從銷售單明細中讀取"編號"列,取它的最大值,以便為新添加的數據編號
intNumberTable = this.link.SelectDataBase(sendSQL);
for (int i=0;i<intNumberTable.Rows.Count;i++)
{
if (intMaxNumberID < System.Int32.Parse(intNumberTable.Rows[i][0].ToString()))
{
intMaxNumberID = System.Int32.Parse(intNumberTable.Rows[i][0].ToString());
}
}
sendSQL = "select 編號 from 銷售單明細";
//從銷售單明細中讀取"編號"列,取它的最大值,以便為新添加的數據編號
intNumberTable = this.link.SelectDataBase(sendSQL);
for (int i=0;i<intNumberTable.Rows.Count;i++)
{
if (intMaxNumberID < System.Int32.Parse(intNumberTable.Rows[i][0].ToString()))
{
intMaxNumberID = System.Int32.Parse(intNumberTable.Rows[i][0].ToString());
}
}
for (int row=0;row<this.newTable.Rows.Count;row++)
{
//首先判斷表中的下一行數據是否為空,如果是則返回,以免因往數據庫中寫入空行而出錯
if(this.newTable.Rows[row][0].ToString() == "")
{
sendSQL = "delete from 銷售單 where 編號 = '" + intMaxSellNumberID + "'";
this.link.UpdateDataBase(sendSQL); //首先刪除這次在銷售單中加入的數據
break;
}
else
{
intMaxNumberID++;
string strWareID = this.dgrd_SellTable[row,0].ToString().Trim();
decimal strWareCount = Decimal.Parse(this.dgrd_SellTable[row,1].ToString().Trim());
decimal strWarePrice = Decimal.Parse(this.dgrd_SellTable[row,2].ToString().Trim());
string strStorageID = this.dgrd_SellTable[row,3].ToString().Trim();
sendValues = "('" + intMaxNumberID +"','"+intMaxSellNumberID +"','"+ strWareID +"','"+ strWareCount +"','"+ strWarePrice +"','"+
decTotalCount +"','"+ 17 +"','"+ decNoTax +"','"+ decTax +"','"+ strStorageID + "')";
sendSQL = "insert 銷售單明細 (編號,銷售單號,貨號,銷售數量,銷售價,稅價合計,稅率,不含稅價,稅額,倉庫) values " + sendValues;
this.link.UpdateDataBase(sendSQL);
}
}
MessageBox.Show("數據保存成功!","信息");
}
catch
{
MessageBox.Show("數據保存失敗,請確認所有信息輸入完整且正確!","提示");
return;
}
}
//---------將銷售單數據存入歷史記錄---------
private void clickedTrashIcon()
{
try
{
if (MessageBox.Show("確實要保存為歷史記錄嗎?","詢問",MessageBoxButtons.YesNo) == DialogResult.Yes)
{
this.link.UpdateDataBase("exec sf_銷售單"); //調用存儲過程
//清除供貨商信息
this.cmb_ClientID.Items[0] = "";
this.txt_Company.Text = "";
//清除底部金額及稅款信息
this.txt_TotalCount.Text = "0.00";
this.txt_NoTax.Text = "0.00";
this.txt_Tax.Text = "0.00";
//清除當前DataGrid中的所有數據
newTable.Clear();
//加入空行保證newTable中不為空,否則刪除所有數據行后保存數據和MouseUp函數將引發異常出錯
newTable.Rows.Add(newTable.NewRow());
MessageBox.Show("數據成功存入歷史表!","信息");
}
}
catch
{
MessageBox.Show("數據存入歷史表時出錯,請檢查數據庫!","提示");
}
}
//------------將所選擇的商品信息讀入表格中------------
private void selectWareMessage()
{
int intCurrentRowNumber = this.dgrd_SellTable.CurrentCell.RowNumber;
//判斷何時需要檢索數據庫的商品清單,讀取商品信息(以免操作數據庫次數過多,影響程序性能)
if (this.dgrd_SellTable[intCurrentRowNumber,0].ToString() != "")
{
string strSearchWord = this.dgrd_SellTable[this.dgrd_SellTable.CurrentCell.RowNumber,0].ToString().Trim();
string sendSQL = "select 貨號,品名,單位 from 商品清單 where 貨號 = '" + strSearchWord + "'";
DataTable tempDataTable = this.link.SelectDataBase(sendSQL);
if (tempDataTable.Rows.Count>0)
{
inputDataGridArray[0] = tempDataTable.Rows[0][0].ToString().Trim();
inputDataGridArray[1] = tempDataTable.Rows[0][1].ToString().Trim();
inputDataGridArray[2] = tempDataTable.Rows[0][2].ToString().Trim();
this.setWareData();
}
//如果從數據庫中沒有檢索出任何數據
else
{
//inputDataGridArray[0]賦值為當前輸入的值,方便用戶再次修改輸入
inputDataGridArray[0] = this.dgrd_SellTable[intCurrentRowNumber,0].ToString().Trim();
inputDataGridArray[1] = "";
inputDataGridArray[2] = "";
this.setWareData();
}
}
}
//------計算總價,稅額等---------
private void controlCalculate()
{
int intCurrentRowNumber = this.dgrd_SellTable.CurrentCell.RowNumber;
string strWareCount = this.dgrd_SellTable[intCurrentRowNumber,1].ToString();
string strWarePrice = this.dgrd_SellTable[intCurrentRowNumber,2].ToString();
string strTotalCounter = this.dgrd_SellTable[intCurrentRowNumber,6].ToString();
//當銷售價和銷售數量不為空,并且總金額為空時將當前光標移到下一行的開始處,以便DataTable依據表達式自動計算DataColumn的值
if (strWareCount != "" && strWarePrice != "" && strTotalCounter=="")
{
this.dgrd_SellTable.CurrentCell = new DataGridCell(intCurrentRowNumber+1,0);
}
//為底部三個文本框計算總金額
decimal intTotalCount = 0;
decimal intNoTax = 0;
decimal intTax = 0;
//首先判斷列是否為空
object obj = newTable.Compute("SUM (金額)","");
if (obj.GetType().ToString() != "System.DBNull")
{
intTotalCount = (decimal)this.newTable.Compute("SUM (金額)","");
intNoTax = (decimal)this.newTable.Compute("SUM (不含稅額)","");
intTax = (decimal)this.newTable.Compute("SUM (稅額)","");
}
this.txt_TotalCount.Text = intTotalCount.ToString("N");
this.txt_NoTax.Text = intNoTax.ToString("N");
this.txt_Tax.Text = intTax.ToString("N");
}
private void SellTable_Load(object sender, System.EventArgs e)
{
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -