2014-01-17 2 views
0

У меня DataGridView (dgHome) имеет несколько столбцов в parentForm (Home). И дочерняя форма (счет) имеет DataGridView (dgbill). Мне нужно Когда я нажимаю на любые столбцы в dgHome, тогда он добавляет эти столбцы в dgbill. Надеюсь, это ясно.Как я могу обновить datagridview для дочерней формы из другого datagridview в родительской форме

`private void dgMenu_CellContentClick(object sender, DataGridViewCellEventArgs e) 

{ 
     DataTable dt; 
     if (e.RowIndex > -1) 
     { 
      if (k < 4) 
      { 
       DataGridViewRow rw = this.dgMenu.Rows[e.RowIndex]; 
       string t = rw.Cells[1].Value.ToString(); 
       if (k == 1) 
       { 
        dt = f.SelectFoodType(t); 
       } 
       else if (k == 2) 
       { 
        dt = a.SelectAdditionType(t); 
       } 
       else if (k == 3) 
       { 
        dt = d.SelectDrinkType(t); 
       } 
       else 
       { 
        MessageBox.Show("select Food, Drink or Addition"); 
        return; 
       } 
       dgMenu.DataSource = null; 
       dgMenu.DataSource = dt; 
       dgMenu.Columns[0].Visible = dgMenu.Columns[2].Visible = false; 
       dgMenu.Columns[1].HeaderText = t; 
       dgMenu.Columns[3].HeaderText = "Price"; 
       k = 100; 
      } 
      else 
      { 
       DataGridViewRow rw = this.dgMenu.Rows[e.RowIndex]; 
       string productname = rw.Cells[1].Value.ToString(); 
       string price = rw.Cells[3].Value.ToString(); 
       string input = Microsoft.VisualBasic.Interaction.InputBox("Enter Quantity: ", "Quantity", "1", -1, -1); 
       int q; 
       bool x = int.TryParse(input, out q); 
       if (x) 
       { 
        EnBill b = new EnBill(UserId); 
        if (IsFormOpen(typeof(EnBill))) 
        { 
         /* in this space I want to add this columns to another DataGridView in another Form*/ 
        } 
       } 
       else 
       { 
        MessageBox.Show("No Input or Valid Input"); 
       } 
      } 
     } 
    }` 
+0

Показать, что ты пытался и где вы стек? – Fabio

+0

Хм ... покажите нам какую-нибудь любовь ... опубликуйте какой-то код и скажите, где или что не работает для u. – Jim

+0

Извините, я не могу опубликовать изображение и мой код сложный –

ответ

0

Вы можете использовать Row.DataBoundItem, чтобы получить данные, присоединенные к ряду. Затем эти данные можно установить в DataGridView в дочерней форме. Есть аналогичный вопрос, на который уже дан ответ.

How to filter/selectively copy values from one DataGridView to another DataGridView

Добавлен рабочий код ...

public class Customer 
{ 
    string name; 
    int age; 

    public Customer(string thename, int theage) 
    { 
     name = thename; 
     age = theage; 
    } 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    public int Age 
    { 
     get { return age; } 
     set { age = value; } 
    } 

} 
public class ChildForm : Form 
{ 
    DataGridView dataGridView1 = new DataGridView(); 
    public ChildForm() 
    { 
     this.ClientSize = new System.Drawing.Size(284, 262); 
     this.Controls.Add(dataGridView1); 
     dataGridView1.Dock = DockStyle.Fill; 
    } 

    public void AddData(List<Customer> theData) 
    { 
     dataGridView1.AutoGenerateColumns = true; 
     dataGridView1.DataSource = theData; 
    } 
} 
public class ParentForm : Form 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new ParentForm()); 
    } 


    DataGridView dataGridView1 = new DataGridView(); 
    Button button1 = new Button(); 
    ChildForm childForm = new ChildForm(); 

    public ParentForm() 
    { 
     this.ClientSize = new System.Drawing.Size(284, 262); 
     this.Controls.Add(dataGridView1); 
     this.Controls.Add(button1); 
     this.Load += new EventHandler(ParentForm_Load); 
     button1.Click += new EventHandler(button1_Click); 
     button1.Dock = DockStyle.Top; 
     button1.Text = "CopyToChild"; 
     dataGridView1.Dock = DockStyle.Fill; 
    } 

    void button1_Click(object sender, EventArgs e) 
    { 
     List<Customer> customers = new List<Customer>(); 
     foreach (DataGridViewRow row in this.dataGridView1.SelectedRows) 
     { 
      Customer customer = row.DataBoundItem as Customer; 
      if (customer != null) 
      { 
       customers.Add(customer); 
      } 
     } 
     childForm.AddData(customers); 

    } 

    private void ParentForm_Load(object sender, EventArgs e) 
    { 

     System.Collections.ArrayList customers = new System.Collections.ArrayList(); 

     customers.Add(new Customer("Thor", 120)); 
     customers.Add(new Customer("Loki", 110)); 
     dataGridView1.AutoGenerateColumns = true; 
     dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; 
     dataGridView1.DataSource = customers; 
     childForm.Show(); 
    } 
} 
+0

Мне нужно, как использовать DataGridView для дочернего элемента в родительской форме –

+0

Выставить метод в дочерней форме, который будет принимать данные из родительский DataGridView в качестве параметра и заполнить DataGridView в этом методе. Я бы не предложил напрямую обращаться к контролю. Но все же, если вы хотите получить доступ, элемент управления DataGridView является общедоступным. – Junaith

+0

Можете ли вы написать простой код PLZ –

Смежные вопросы