2016-04-19 6 views
3

Ich habe eine Datagridview (dataGridView1 die eine dataGridview2 Spaltenkopf enthält), in der ich einer checkboxcolumn haben, genannt dgvCkb, in dataGridView1. Wenn ich dgvCkb in einer beliebigen Zeile deaktivieren, sollten die Daten dieser Zeile nicht in einem anderen dataGridview2 (dataGridview2 ist mit einer Datenbank (localhost) verbunden) angezeigt werden.angezeigte Überprüft Spaltenwerte in Datagridview Ankreuzfeld Daten in einer anderen Form Datagridview zeigt

erste Form ist Datagridview:

enter image description here

zweite Form ist Datagridview:

enter image description here

Meine Codierung für diese:

form1 Codierung

private void Customized_column_Load(object sender, EventArgs e) 
{ 
    dataGridView1.ColumnCount = 2; 
    DataGridViewCheckBoxColumn dgvCkb = new DataGridViewCheckBoxColumn(); 
    dgvCkb.ValueType = typeof(bool); 
    dgvCkb.Name = "Chk"; 
    dgvCkb.HeaderText = "vis."; 
    dataGridView1.Columns.Add(dgvCkb); 

    dataGridView1.Columns[0].Name = "Column"; 
    dataGridView1.Columns[1].Name = "Column size"; 

    string[] row = new string[] {"Date", "103" }; 
    dataGridView1.Rows.Add(row); 
    row = new string[] {"Time", "103" }; 
    dataGridView1.Rows.Add(row); 
    row = new string[] { "Callee Number", "103" }; 
    dataGridView1.Rows.Add(row); 
    row = new string[] { "User", "103" }; 
    dataGridView1.Rows.Add(row); 
    row = new string[] { "Called Number", "103" }; 
    dataGridView1.Rows.Add(row); 
    row = new string[] { "Department", "103" }; 
    dataGridView1.Rows.Add(row); 
    row = new string[] { "Trunk", "103" }; 
    dataGridView1.Rows.Add(row); 
    row = new string[] { "City", "103" }; 
    dataGridView1.Rows.Add(row); 
    row = new string[] { "Duration", "103" }; 
    dataGridView1.Rows.Add(row); 
    row = new string[] { "Pulse", "103" }; 
    dataGridView1.Rows.Add(row); 
    row = new string[] { "Amount", "103" }; 
    dataGridView1.Rows.Add(row); 
    row = new string[] { "Status", "103" }; 
    dataGridView1.Rows.Add(row); 
    row = new string[] { "Callee Extension", "103" }; 
    dataGridView1.Rows.Add(row); 
    row = new string[] { "Trunk Port", "103" }; 
    dataGridView1.Rows.Add(row); 
    row = new string[] { "Call Type", "103" }; 
    dataGridView1.Rows.Add(row); 

} 

form2 Codierung

String MyConString = "SERVER=localhost;" + 
       "DATABASE=test;" + 
       "UID=root;" + 
       "PASSWORD=asterisk"; 

private void PBX_Logger_Load(object sender, EventArgs e) 
{ 
    MySqlConnection con = new MySqlConnection(MyConString); 
    MySqlCommand cmd = new MySqlCommand("SELECT date as Date,time as Time,user as User,department as Department,trunk as Trunk,city as City,calleenumber as CalleeNumber,callednumber as CalledNumber,duration as Duration,pulse as Pulse,amount as Amount,status as Status,calleextension as CalleeExtension,trunkport as TrunkPort,calltype as CallType from pbx", con); 
    con.Open(); 
    DataTable dataTable = new DataTable(); 
    MySqlDataAdapter da = new MySqlDataAdapter(cmd); 
    da.Fill(dataTable); 
    dataGridView1.DataSource = dataTable; 
} 

ich für die Entwicklung neuer bin so für Lösung suchen. bitte verweise mich auf einen Link.

Danke

Grüße Dhana

+0

Haben Sie sich 'DataGridView'-Ereignisse angesehen: https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellvaluechanged(v=vs.110).aspx – Draken

Antwort

0

Der Einfachheit halber wollen wir die Formularnamen übernehmen auf der Grundlage Ihrer Load Methode behandelt Spiel entsprechend:

Form1.Load += Customized_column_Load; 
Form2.Load += PBX_Logger_Load; 

Ich habe auch davon ausgegangen, dass Sie die Öffnungs zweite Form aus der Form1 wie folgt:

Form2 form2 = new Form2(); 
form2.ShowDialog(); 

Als solches benötigt das zweite Formular nur Zugriff auf die Rasterwerte des ersten Formulars. Wenn Sie den DataGridView in den Form2 Konstruktor eingeben, kann Form2 ihn in einer Variablen speichern und während der Ladezeit abrufen - wo die Zeilen durchgeschleift werden können und auf die Größen- und Sichtbarkeitswerte zugegriffen wird und DataGridView: DataGridView:

Form2 form2 = new Form2(dataGridView1); 
form2.ShowDialog(); 

Dies auch die folgenden übernimmt auch in Form1 gesetzt:

private DataGridView parentDGV; 

public Form2(DataGridView parentDGV) 
{ 
     InitializeComponent(); 
     this.parentDGV = parentDGV; 
} 

private void PBX_Logger_Load(object sender, EventArgs e) 
{ 
    dataGridView1.AllowUserToAddRows = false; 

    // Your code to fill the DataSource. 

    foreach (DataGridViewRow row in parentDGV.Rows) 
    { 
     string colName = row.Cells["Column"].Value.ToString(); 
     int size = 0; 
     int.TryParse(row.Cells["Column size"].Value.ToString(), out size); 

     dataGridView1.Columns[colName].Width = size; 
     dataGridView1.Columns[colName].Visible = row.Cells["Chk"].Value != null && (bool)row.Cells["Chk"].Value; 
    } 
} 

schließlich in Form1, Ihren Anruf entsprechend ändern

dataGridView1.AllowUserToAddRows = false; 

Andernfalls müssen Sie einige Nullprüfungen hinzufügen, wenn Sie die Zeilen innerhalb von Form2 durchlaufen.

+0

Vielen Dank für Ihre Antwort, aber ich habe einen Fehler in dieser Zeile: 'dataGridView1.Columns [colName].Sichtbar = (bool) Zeile. Zellen ["Chk"]. Wert; ' as 'Eine nicht behandelte Ausnahme vom Typ' System.NullReferenceException 'ist in PBX aufgetreten. Logger.exe Zusätzliche Informationen: Objektreferenz wurde nicht auf eine Instanz eines Objekts gesetzt.' was mache ich jetzt? Entschuldigung für Ärger. – dhana

+0

Entschuldigung, ich habe keine Zeile berücksichtigt, auf die die Spalte "CheckBox" nie geklickt wurde. Bis zu diesem Punkt wäre es "null". Sehen Sie sich die Bearbeitung dieser Codezeile in meiner Antwort oben an. – OhBeWise

Verwandte Themen