2017-03-02 52 views
0

林完全以新的編碼,但我嘗試學習:) 在即時通訊上使用的應用程序我有一個按鈕,添加一個新行HOWTO編輯所選行,但保存爲新行(文本框的DataGridView,SQL)

Edit(true); 
dbDocSet.DocData.AddDocDataRow(dbDocSet.DocData.NewDocDataRow()); 
docDataBindingSource.MoveLast(); 

,然後我從文本框保存另一個按鈕

Edit(false); 
docDataBindingSource.EndEdit(); 
docDataTableAdapter.Update(dbDocSet.DocData); 
dataGridView1.Refresh(); 

我也可以編輯一行

Edit(true); 

如何編輯一行但在編輯後將其保存到新行而不是覆蓋一個即時編輯?

或者,也許我shold改變它像這樣的工作:

代替 - 添加新行newbutton - 填寫文本框 - 保存與savebutton

這樣做: - 填寫在文本框 - 保存到新行savebutton

編輯: - 通過選擇行 填充文本框 - 請在文本框變化- 保存到同一行與changebutton enter image description here

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

    private void Form1_Load(object sender, EventArgs e) 
    { 
     Rectangle resolutionRect = System.Windows.Forms.Screen.FromControl(this).Bounds; 
     if (this.Width >= resolutionRect.Width || this.Height >= resolutionRect.Height) 
     { 
      this.WindowState = FormWindowState.Maximized; 
     } 
     this.docDataTableAdapter.Fill(this.dbDocSet.DocData); 
     Edit(false); 
    } 

    private void Edit(bool value) 
    { 
     textBox1.Enabled = value; 
     textBox2.Enabled = value; 
     textBox3.Enabled = value; 

然後更textBox.Enable =值(143日)

private void button1_Click(object sender, EventArgs e) 
    { //-----Nytt dokument----- 
     try 
     { 
      Edit(true); 
      dbDocSet.DocData.AddDocDataRow(dbDocSet.DocData.NewDocDataRow()); 
      docDataBindingSource.MoveLast(); 
      textBox1.Focus(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      dbDocSet.DocData.RejectChanges(); 
     } 

     for (int i = 0; i < dataGridView1.RowCount - 1; i++) 

     { 
      if (dataGridView1.Rows[i].Cells[0].Value.ToString() == "" || dataGridView1.Rows[i].Cells[1].Value.ToString() == "") 

      { 

       dataGridView1.Rows.RemoveAt(i); 
       i--; 
      } 
     } 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { //-----Öppna upp för att kunna ändra----- 
     Edit(true); 
     textBox1.Focus(); 
    } 

    private void button4_Click(object sender, EventArgs e) 
    { //-----Avbryt ifyllnad dokument----- 
     Edit(false); 
     docDataBindingSource.ResetBindings(false); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { //-----Spara dokument----- 
     if (string.IsNullOrWhiteSpace(textBox1.Text)) 
     { 
      MessageBox.Show("Dokumenttyp måste anges !", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      textBox1.Focus(); 
     } 
     else 
     if (string.IsNullOrWhiteSpace(textBox2.Text)) 
     { 
      MessageBox.Show("Dokumentnamn måste anges !", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      textBox2.Focus(); 
     } 
     else 
     if (string.IsNullOrWhiteSpace(textBox3.Text)) 
     { 
      MessageBox.Show("Revision för dokumentet måste anges !", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      textBox3.Focus(); 
     } 
     else 
     try 
     { 
      Edit(false); 
      docDataBindingSource.EndEdit(); 
      docDataTableAdapter.Update(dbDocSet.DocData); 
      dataGridView1.Refresh(); 
      textBox1.Focus(); 
      MessageBox.Show("Dokument sparat med lyckat resultat !", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      dbDocSet.DocData.RejectChanges(); 
     } 
    } 

    private void dataGridView1_KeyDown_1(object sender, KeyEventArgs e) 
    { //-----Ta bort valt dokument----- 
     if (e.KeyCode == Keys.Delete) 
      foreach (DataGridViewCell oneCell in dataGridView1.SelectedCells) 
      { 
       if (oneCell.Selected) 
        if (MessageBox.Show("Är du säker på att du vill ta bort dokumentet ?", "Message", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) 
         dataGridView1.Rows.RemoveAt(oneCell.RowIndex); 
      } 
    } 

回答

0

嘗試使用dataGridView1_CellValidating - LINK。它發生在單元失去輸入焦點時,啓用內容驗證。因此,在驗證是否要添加新行而不是編輯當前行時,只需從行中獲取當前值並使用它來添加新行,並且在驗證結束時使用e.Cancel取消行編輯。

如果您想將某些行的數據複製到文本框中,請在文本框中進行更改,然後使用按鈕添加新行,您可以使用dataGridView1_CellClick - LINK。所以基本上當用戶點擊單元格時,您會得到那個row index of that cell,然後就可以訪問該行的每個單元格。隨着你填充文本框,做一些改變,並在保存按鈕,你只需添加新的行。

如果您的問題也是如何添加新行的DataGridView你必須回答在這裏:LINK

+0

@TobiasJohansson我編輯我的答案,看看它 – DoLoop

+0

現在我不理解你。你可以請你截圖,所以我知道它的樣子。我認爲按鈕功能是添加新的行datagridview – DoLoop

+0

@TobiasJohansson我想我正在趕上你想要做的,但你做錯了。 'Ny'按鈕只需要啓用文本框,而在'Spara'則可以保存您在文本框中寫入的內容並添加新行。另一個我不明白這一點。 – DoLoop

相關問題