Witam,
Mam problem z czyszczeniem DataGridView. Pobieram dane z bazy danych i wypelniam nimi DataGridView. Klikam na dany rekord i w innym formularzu go albo usuwam (z DataGridView i zmieniam oznaczenie w bazie danych) albo pozostowiam taki jak był. Jednak gdy zamknę formularz na którym działam na rekordzie to wszystkie rekordy są podwajane. Np: mam 2 rekordy:
imię | nazwisko |
xyz | kowalski |
abc | nowakkk |
to po kliknięciu na dany rekord i zwyczajnym zamknięciu formularza DataGridView wyświetli:
xyz | kowalski |
abc | nowakkk |
xyz | kowalski |
abc | nowakkk |
Wiem, że to pewnie problem z DataTable albo BindingSource, ale nie wiem jak to wyczyścić by znów pobierało aktualne dane z bazy danych i je poprawnie wyświetlało. Każdorazowo po zamknięciu formularza wykonywana jest funkcja GetListOperatDetailsAndInsertToDGV(). Poniżej kod:
public BindingSource ds = new BindingSource();
public DataTable dt = new DataTable();
public void GetListOperatDetailsAndInsertToDGV()
{
OperatDetailsSql operatDetailsSql = new OperatDetailsSql();
operatDetails = operatDetailsSql.GetListOperatDetailsSsmToAll(schemat); // pobranie listy szczegółów operatów, które w typie mają SimpleScanMapa
if (!dt.Columns.Contains("IEMZ"))
{
dt.Columns.Add("IEMZ", typeof(string));
}
if (!dt.Columns.Contains("Skaner"))
{
dt.Columns.Add("Skaner", typeof(string));
}
if (!dt.Columns.Contains("Numer strony"))
{
dt.Columns.Add("Numer strony", typeof(string));
}
//tworzenie poszczególnych kolumn
for (int i = 0; i < operatDetails.Count; i++) // uzupelnianie tabeli pobranymi danymi
{
int pozycjaSkanera = GetSkanerName(PathTranche);
var txtSkaner = operatDetails[i].FilePath.Split(new[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);
string skaner = txtSkaner[pozycjaSkanera];
dt.Rows.Add(new object[] { operatDetails[i].Operat.Iemz, skaner, operatDetails[i].PageNumber });
}
ds.DataSource = dt;
dataGridView1.DataSource = ds;
List<object> scannerList = new List<object>();
for (int i = 0; i < dataGridView1.RowCount; i++)
{
object skaner = dataGridView1.Rows[i].Cells[1].Value;
if (!scannerList.Contains(skaner))
{
scannerList.Add(skaner);
}
}
for (int i = 0; i < scannerList.Count; i++)
{
comboBox1.Items.Add(scannerList[i]);
}
comboBox1.SelectedIndex = 0;
slog.Info("Pobrano liste szczegolow operatow oznaczonych jako mapy");
// ds = null;
// ds.Clear();
}