2017-01-31 1 views
1

So versuche ich einen Code zu erstellen, wo ich in der Lage wäre, nach dem Klick F1 in einer neuen Form eine datagridview abhängig von der textbox anzuzeigen. Dann möchte ich in diese Reihe doppelklicken und im Haupt datagridview anzeigen, was ich in das neue Formular datagridview auswählte. Dies ist der Code, den ich bekam:Doppelklicken Sie in DataGridView Zeile und Spalten in einem anderen DataGridView in C#

private void dataGridView1_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e) 
{ 
    DataGridViewRow dr = dataGridView1.SelectedRows[0]; 
    this.Hide(); 
    frmPrincipal frm = new frmPrincipal(); 

    try 
    { 
     con = new SqlConnection(cs.DBConnP); 
     con.Open(); 

     cmd = new SqlCommand(@"SELECT RTRIM(CL.Cargs) AS 'Cargs', RTRIM(S.Abvs) AS 'Abvs', RTRIM(CL.Linha) AS 'Linha', RTRIM(CL.Qty) AS 'Quantity' 
          FROM CargsCab CC (NOLOCK) 
          INNER JOIN CargsLin CL (NOLOCK) ON CC.Cargs = CL.Cargs 
          INNER JOIN Stock S (NOLOCK) ON CL.Code = S.Code 
          INNER JOIN Marks M (NOLOCK) ON S.Marks = M.Marks 
          WHERE CC.Date >= GETDATE() - 120 AND CL.State NOT IN ('F', 'A') AND S.TypeEmb = 'P' 
          AND CC.Type = 'OCS' AND CL.Cargs LIKE '%" + dr.Cells[0].Value.ToString() + "%' ORDER BY CL.Cargs, S.Marks DESC, S.Abvs", con); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     DataSet ds = new DataSet(); 

     da.Fill(ds, "CargCab"); 
     da.Fill(ds, "CargLin"); 
     da.Fill(ds, "Stock"); 
     da.Fill(ds, "Mark"); 

     frm.dataGridView1.DataSource = ds.Tables["CargCab"].DefaultView; 
     frm.dataGridView1.DataSource = ds.Tables["CargLin"].DefaultView; 
     frm.dataGridView1.DataSource = ds.Tables["Stock"].DefaultView; 
     frm.dataGridView1.DataSource = ds.Tables["Mark"].DefaultView; 

     con.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Error\nDetalhes: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

Wie könnte ich es lösen?

Antwort

0

Wenn ich Sie gut verstanden habe, möchten Sie ausgewählte Daten aus Popup-Formular zurück zu Ihrem Hauptformular erhalten. Ich ziehe es in folgenden Weise vorgehen:

auf Hauptformular, wenn Sie neues Formular erstellen, um es Event-Handler anhänge

FormClosing 

Auf dieser Fall rufen Sie die Methode, die Sie benötigen in Ihrem neuen Formular hinzufügen zum Beispiel

var selectedData= MyForm.GetData(); 

Dies ist verfügbar, da das Formular noch geschlossen und noch nicht entsorgt wurde.

Ihre Methode "GetData" muss natürlich ausgewählte Daten von datagridView sammeln. Dies wurde bei stackoverflow mehrmals abgedeckt, so dass Sie dies leicht finden.

Weise korrigiert:

public partial class Form1 : Form 
{ 

    private Form2 f2; 
    private obj returnedData; 

    public Form1() 
    { 
     InitializeComponent(); 


    } 



    private void button1_Click(object sender, EventArgs e) 
    { 
     f2 = new Form2(); 
     f2.FormClosing += F_FormClosing; 
     f2.Show(); 
    } 

    private void F_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     this.returnedData = f2.GetData(); //clicked data is returned to your main form, do what you want with it 
    } 
} 

public partial class Form2 : Form 
{ 
    private List<obj> list; 
    private obj selectedData; 

    public Form2() 
    { 
     InitializeComponent(); 
     data.CellDoubleClick += DataGridView1_CellDoubleClick; 

     list = new List<obj>(); 
     data.AutoGenerateColumns = true; 
     list.Add(new obj() { a = "abc1", b = "abc2" }); 
     list.Add(new obj() { a = "cda1", b = "cda2" }); 
     data.DataSource = list; 



    } 



    internal obj GetData() 
    { 
     return selectedData; 
    } 

    private void DataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) 
    { 

     selectedData = list.ElementAt(e.RowIndex); 

     this.Close(); 
    } 

} 

internal class obj 
{ 
    [DisplayName("aaa")] 
    public string a { get; set; } 

    [DisplayName("bbb")] 
    public string b { get; set; } 
} 
+0

Was ist mit dem Datagridview-Zeile doppelklicken Sie? – RekcsGaming

+0

Datagridview nicht RowDoubleClick Ereignis, so dass Sie Celldoubleclick private void DataGridView1_CellDoubleClick (object sender, DataGridViewCellEventArgs e) { var ddd = dataGridView1.Rows [e.RowIndex] verwenden können; } –

+0

DataGridViewCellEventArgs enthält RowIndex. Wenn Ihr dataGridView über eine Datenquelle verfügt, können Sie leicht auf das Objekt klicken. –

Verwandte Themen