J'ai deux formes (Menu, Base de données) à la fois avec datagridviews. Le premier formulaire a une colonne de bouton qui copie les informations de ligne à la vue datagridview sur l'autre formulaire et l'affiche. Il y a aussi un bouton sur le premier formulaire qui est destiné à ouvrir simplement l'instance de la deuxième forme précédemment ouverte. J'ai 2 problèmes principaux qui se produisent. La première est que la ligne se copie, mais lorsque j'appuie sur un autre bouton de colonne d'une autre ligne de la première forme, elle ouvre un nouveau formulaire au lieu d'ajouter sa valeur à l'instance du formulaire déjà ouvert. Le deuxième problème est que lorsque le bouton X en haut du second formulaire est enfoncé et que le formulaire se ferme, l'information est perdue. Cela ne me dérange pas de perdre l'information une fois l'application fermée, mais je veux la conserver indépendamment de la fermeture de la seconde forme. J'ai essayé d'utiliser singleton pour garder l'instance et Hide() pendant les événements de fermeture de formulaire pour empêcher la fermeture du second formulaire mais, peut-être que quelque chose manque ou n'est pas correct avec mon code.Comment puis-je conserver des informations datagridview sur un formulaire et empêcher un bouton .Show() de créer de nouvelles instances?
Première forme Menu
//Open Database
private void DB_Btn_Click(object sender, EventArgs e)
{
SendRow = false;
DataGridViewRow DB_GridViewRow = new DataGridViewRow();
DataTable DB_Table = new DataTable();
Database DB = new Database(DB_GridViewRow, SendRow);
DB = Database.GetInstance();
DB.Show();
}
//Copy To Database
private void LeadsDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
SendRow = true;
DataTable DB_Table = new DataTable();
DataGridView DB_GridView = new DataGridView();
if (!_DB.Visible)
{
_DB = new Database(LeadsDataGridView.Rows[e.RowIndex], SendRow);
_DB.Show();
}
else
{
SendRow = false;
_DB = Database.GetInstance();
_DB.BringToFront();
}
}
Formulaire deuxième base de données
DataTable DB_Table;
BindingList<DataPile> DB_GridViewList = new BindingList<DataPile>();
private static Database _instance = null;
public static Database GetInstance()
{
bool SendRow = new bool();
DataGridViewRow DB_GridViewRow = new DataGridViewRow();
if (_instance == null) _instance = new Database(DB_GridViewRow, SendRow);
return _instance;
}
public Database()
{
InitializeComponent();
InitDBTable();
GetInstance();
DB_GridView.DataSource = DB_GridViewList;
}
public Database(DataGridViewRow DB_GridViewRow, bool SendRow)
{
InitializeComponent();
InitDBTable();
DB_GridView.DataSource = DB_GridViewList;
if (DB_GridViewList != null && SendRow == true)
{
DB_GridViewList.Add(new DataPile { BusinessName = (string)DB_GridViewRow.Cells[1].FormattedValue,
PhoneNumber = (string)DB_GridViewRow.Cells[2].FormattedValue });
}
}
public class DataPile
{
public string BusinessName { get; set; }
public string PhoneNumber { get; set; }
public string MobileNumber { get; set; }
public string ContactName { get; set; }
public string Email { get; set; }
public string MonthlyRevenue { get; set; }
}
private void InitDBTable()
{
DB_Table = new DataTable("DB_GridTable");
DB_Table.Columns.Add("Business Name", typeof(string));
DB_Table.Columns.Add("Phone Number", typeof(string));
DB_Table.Columns.Add("Mobile Number", typeof(string));
DB_Table.Columns.Add("Contact Name", typeof(string));
DB_Table.Columns.Add("Email", typeof(string));
DB_Table.Columns.Add("Monthly Revenue", typeof(string));
DB_GridView.DataSource = DB_Table;
}
private void Database_Load(object sender, EventArgs e)
{
}
private void Database_FormClosing(object sender, FormClosingEventArgs e)
{
Hide();
e.Cancel = true; // this cancels the close event.
}
}
Chaque seconde fois que vous cliquez sur la ligne, il crée une nouvelle base de données. Get_Instance() définit la propriété .Visible sur false, ce qui crée ensuite une nouvelle base de données() au prochain clic. –