Merhaba, sizden bir konuda yardım rica ediyorum.
Datatable da yer alan Operasyon_1, Operasyon_2, Operasyon_3 vs. şeklinde kolonlarım var.
örnek olarak resim ekledim. değerler bazen farklı kolonlarda olabiliyor. ben 6 kolondaki değerleri alıp benzersiz "key" lere dönüştürmek istiyorum.
Ortak yaptığım bu kelimeleri checkbox listesine eklemek istiyorum. tümü işaretli olacak ilk form load olduğunda (orasını ben hallederim)
Halledemediğim ikinci kısım ise;
bu checkbox ta işaretini kaldırdığımı hangi kolonda olursa olsun bulur datatable dan kaldıracak. yani kalan checkboxları filtreli olarak tutacak datatable da.
biraz karmaşık mı oldu bilemedim? yardım edebilir misiniz bana bu konuda?
class IndexInfo
{
public IndexInfo(int rowIndex, int columnIndex)
{
this.RowIndex = rowIndex;
this.ColumnIndex = columnIndex;
}
public int RowIndex { get; set; }
public int ColumnIndex { get; set; }
}
class UniqueList
{
private Dictionary<string, List<IndexInfo>> DicValues = new Dictionary<string, List<IndexInfo>>();
public void Add(string value, int rowIndex, int columnIndex)
{
if (DicValues.TryGetValue(value, out List<IndexInfo> list))
{
list.Add(new IndexInfo(rowIndex, columnIndex));
}
else
{
list = new List<IndexInfo>();
list.Add(new IndexInfo(rowIndex, columnIndex));
DicValues.Add(value, list);
}
}
public IEnumerable<IndexInfo> GetIndexList(string key)
{
if (DicValues.TryGetValue(key, out List<IndexInfo> list))
{
foreach (var index in list)
{
yield return index;
}
}
else
throw new Exception("Key sözlükte yok!");
}
public List<string> GetList()
{
return DicValues.Keys.ToList();
}
}UniqueList uniqueList = new UniqueList();
private void Form1_Load(object sender, EventArgs e)
{
var con = DataBase.Ins.GetConnection();
string query = "select * from TBLBANK";
SqlCommand cmd = new SqlCommand(query, con);
con.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dataTable);
con.Close();
da.Dispose();
dataGridView1.DataSource = dataTable;
for (int i = 0; i < dataTable.Rows.Count; i++)
{
var row = dataTable.Rows[i];
for (int x = 0; x < dataTable.Columns.Count; x++)
{
if (x > 0) // id dışındaki kolonlar
uniqueList.Add(row[x].ToString(), i, x);
}
}
chckList.DataSource = uniqueList.GetList();
for (int i = 0; i < chckList.Items.Count; i++)
{
chckList.SetItemChecked(i, true);
}
chckList.ItemCheck += chckList_ItemCheck;
}
private void chckList_ItemCheck(object sender, ItemCheckEventArgs e)
{
var checkList = sender as CheckedListBox;
var dataTable = dataGridView1.DataSource as DataTable;
foreach (var index in uniqueList.GetIndexList(checkList.Items[e.Index].ToString()))
{
if (e.NewValue == CheckState.Checked)
dataTable.Rows[index.RowIndex][index.ColumnIndex] = checkList.Items[e.Index].ToString();
else
dataTable.Rows[index.RowIndex][index.ColumnIndex] = "";
}
}