Comme le titre dit,ScrollBars de datagridview seront crash lorsque la hauteur de toutes les lignes dépassent la hauteur de la vision de datagridview
DataGridview.ScrollBars = vertical;
Supposons que la vision de DataGridview peut contenir 4 lignes, si la ligne arrive à 6, elle a un Vertical ScrollBar. Mais si vous cliquez sur ScrollBar, le programme va planter. Si nous définissons DataGridview.ScrollBars = None, aucun problème ne se produira.
public partial class visitorLeave : Form
{
public visitorLeave()
{
InitializeComponent();
}
bool isWorkerStopped = false;
bool clickstart = false;
ManageEmployee me = null;
Thread tr1;
private void visitorLeave_Load(object sender, EventArgs e)
{
me = new ManageEmployee(10);
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = me.DataSource;
tr1 = new Thread(new ThreadStart(Add));
tr1.IsBackground = true;
tr1.Start();
}
void Add()
{
while (!isWorkerStopped)
{
if (clickstart)
{
me.AddEmployee(new EmployeeData("new" + DateTime.Now.Ticks.ToString(), "0", "0", "0", "0", "0", null));
dataGridView1.DataSource = me.DataSource;
dataGridView1.UpdateRowHeightInfo(0, true);
clickstart = false;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
clickstart = !clickstart;
}
}
Mais j'ai encore une question: je veux un programme (ou un thread) pour ajouter des données à la source de données, et le MainProgram met à jour le datagridview. Comment puis-je le faire? – Michael
Il n'y a aucun problème à utiliser un thread pour ajouter des données, disons, à une liste <>. Mais la relier à la grille * doit * arriver sur le fil principal. Ce n'est pas un problème, la récupération des données est le bit cher, la liaison n'est pas. –