Hi , Below is the code for my customdatagridview . Take a closer look at its constructor . I have changed it as i want to access any other datagridview which is present on the using form itself.
public partial class betterdatagridview : DataGridView
{
public DataGridView dgv;
private DataSet dataSet;
public betterdatagridview( DataGridView dv)
{
** // dgv = new DataGridView(); // no use **
dgv = dv;
InitializeComponent();
this.AllowUserToAddRows = false;
this.AllowUserToResizeColumns = false;
this.BorderStyle = BorderStyle.None;
this.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.None;
this.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.None;
this.CellBorderStyle = DataGridViewCellBorderStyle.None;
this.RowHeadersVisible = false;
}
protected override void OnEditingControlShowing(DataGridViewEditingControlShowingEventArgs e)
{
base.OnEditingControlShowing(e);
TextBox txt = e.Control as TextBox;
txt.TextChanged -= txt_TextChanged;
txt.KeyDown -= new KeyEventHandler(txt_KeyDown);
txt.Enter -= txt_Enter;
txt.KeyPress -= new KeyPressEventHandler(txt_KeyPress);
if (this.CurrentCell.ColumnIndex == 0)
{
if (txt != null)
{
txt.TextChanged += txt_TextChanged;
txt.KeyDown += new KeyEventHandler(txt_KeyDown);
txt.Enter += txt_Enter;
}
}
if (this.CurrentCell.ColumnIndex == 1 || this.CurrentCell.ColumnIndex == 2) // Assuming the first column has an index of 0
{
if (txt != null)
{
txt.KeyPress += new KeyPressEventHandler(txt_KeyPress);
}
}
}
private void txt_Enter(object sender, EventArgs e)
{
if (this.CurrentCell.ColumnIndex > 0)
return;
dgv.Visible = true; // runtime error as compiler reach here
dgv.Columns["id"].Visible = false;
dgv.Columns["current_balance"].Visible = false;
dgv.Columns["opening_balance"].Visible = false;
dgv.CurrentCell = dgv.Rows[0].Cells[1];
}
}
}
I am trying to use the above control on Form3 . Form 3 has two datagridviews . one is betterdatagridview and the other one is datagridview1 . Below is the designer code file for Form3 .
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
///
private Supercontrols.betterdatagridview betterdatagridview1;
private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
private System.Windows.Forms.DataGridViewTextBoxColumn Column2;
private System.Windows.Forms.DataGridView dataGridView1;
private void InitializeComponent()
{
this.dataGridView1 = new System.Windows.Forms.DataGridView();
this.betterdatagridview1 = new datagridviewusingchatgpt.Supercontrols.betterdatagridview(dataGridView1);
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.betterdatagridview1)).BeginInit();
this.SuspendLayout();
//
// dataGridView1
//
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.Location = new System.Drawing.Point(548, 12);
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.RowHeadersWidth = 51;
this.dataGridView1.RowTemplate.Height = 24;
this.dataGridView1.Size = new System.Drawing.Size(240, 416);
this.dataGridView1.TabIndex = 3;
//
// betterdatagridview1
//
this.betterdatagridview1.AllowUserToAddRows = false;
this.betterdatagridview1.AllowUserToResizeColumns = false;
this.betterdatagridview1.BackgroundColor = System.Drawing.SystemColors.Control;
this.betterdatagridview1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.betterdatagridview1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
this.betterdatagridview1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
this.betterdatagridview1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.betterdatagridview1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Column1,
this.Column2});
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
this.betterdatagridview1.DefaultCellStyle = dataGridViewCellStyle1;
this.betterdatagridview1.Location = new System.Drawing.Point(2, 92);
this.betterdatagridview1.Name = "betterdatagridview1";
this.betterdatagridview1.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
this.betterdatagridview1.RowHeadersVisible = false;
this.betterdatagridview1.RowHeadersWidth = 51;
this.betterdatagridview1.RowTemplate.Height = 24;
this.betterdatagridview1.Size = new System.Drawing.Size(482, 135);
this.betterdatagridview1.TabIndex = 1;
//
// Column1
//
this.Column1.HeaderText = "Particulars";
this.Column1.MinimumWidth = 6;
this.Column1.Name = "Column1";
this.Column1.Width = 125;
//
// Column2
//
this.Column2.HeaderText = "amount";
this.Column2.MinimumWidth = 6;
this.Column2.Name = "Column2";
this.Column2.Width = 125;
//
// form3
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.dataGridView1);
this.Controls.Add(this.betterdatagridview1);
this.Name = "form3";
this.Text = "form3";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.form3_FormClosing);
this.Load += new System.EventHandler(this.form3_Load);
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.betterdatagridview1)).EndInit();
this.ResumeLayout(false);
}
}
public partial class form3 : Form
{
public form3()
{
InitializeComponent();
}
private void form3_Load(object sender, EventArgs e)
{
dataGridView1.Visible = false;
dataGridView1.ColumnHeadersVisible = false;
dataGridView1.RowHeadersVisible = false;
dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.BorderStyle = BorderStyle.None;
dataGridView1.ReadOnly = true;
dataGridView1.MultiSelect = false;
dataGridView1.AllowUserToResizeColumns = false;
dataGridView1.AllowUserToResizeRows = false;
dataGridView1.DataSource = connectionlogics.FillDataGridView($"SELECT * FROM ledgernames");
}
}
I am getting an runtime error . Pls suggest how can i access and use the datagridview on my betterdatagridview .
