hi below is my for i want to add textbox input to gridview below code is before bracket it will added all data added correctly.but if using bracket then not added input in textbox is 8-A
4-B
12-A
[2-D
6-C]5
8-A
private void textBox11_TextChanged(object sender, EventArgs e) { string input = textBox11.Text; ProcessInputAndUpdateGrid(input); } // private void ProcessInputAndUpdateGrid(string input) { // Clear previous data dataGridView1.Columns.Clear(); dataGridView1.Rows.Clear(); // Initialize grid with "Column1" and first row "X" dataGridView1.Columns.Add("Column1", "Column1"); dataGridView1.Rows.Add("X"); Dictionary<string, int> rowMap = new Dictionary<string, int>(); string lastColumnName = ""; bool inBracket = false; // Track if we're inside a bracket int currentMultiplier = 1; // Default multiplier string bracketContent = ""; // Store content inside the bracket // Split input into lines var lines = input.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { string trimmedLine = line.Trim(); if (trimmedLine.StartsWith("[")) { // We have encountered a bracketed section inBracket = true; bracketContent = trimmedLine.Substring(1).Trim(); // Collect content inside the bracket } else if (trimmedLine.EndsWith("]")) { // We are closing the bracket inBracket = false; bracketContent += "\n" + trimmedLine.Substring(0, trimmedLine.Length - 1).Trim(); // Add this line to bracket content // Parse multiplier after closing bracket (if available) string afterBracketContent = trimmedLine.Substring(trimmedLine.IndexOf(']') + 1).Trim(); if (!string.IsNullOrEmpty(afterBracketContent) && !int.TryParse(afterBracketContent, out currentMultiplier)) { currentMultiplier = 1; // If no valid multiplier is found, use default multiplier (1) } // Process the bracket content with the correct multiplier ProcessBracketContent(bracketContent, currentMultiplier, rowMap, ref lastColumnName); // Reset bracket content for future use bracketContent = ""; } else if (inBracket) { // We're inside the bracket, collect content until we encounter closing bracket bracketContent += "\n" + trimmedLine; } else { // Process regular lines (outside bracket) with default multiplier 1 ProcessItem(trimmedLine, rowMap, 1, ref lastColumnName); // Default multiplier 1 for non-bracketed lines } } // Apply default multiplier of 1 to the last column in the X row if (!string.IsNullOrEmpty(lastColumnName)) { if (dataGridView1.Rows[0].Cells[lastColumnName].Value == null) { dataGridView1.Rows[0].Cells[lastColumnName].Value = 1; } } } private void ProcessBracketContent(string bracketContent, int multiplier, Dictionary<string, int> rowMap, ref string lastColumnName) { // Split bracket content into items and process them var items = bracketContent.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); foreach (var item in items) { ProcessItem(item.Trim(), rowMap, multiplier, ref lastColumnName); // Process each item with the correct multiplier } } private void ProcessItem(string item, Dictionary<string, int> rowMap, int multiplier, ref string lastColumnName) { // Parse value and key from input like "2-A" var parts = item.Split('-'); if (parts.Length != 2) return; if (!int.TryParse(parts[0], out int value)) { MessageBox.Show("Error: Invalid value in input.", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } string key = parts[1]; // Add row for the key if not exists if (!rowMap.ContainsKey(key)) { rowMap[key] = dataGridView1.Rows.Add(key); } // Determine column dynamically string columnName = "C" + (2 + dataGridView1.Columns.Count - 1); // Start from C2 dynamically if (!dataGridView1.Columns.Contains(columnName)) { dataGridView1.Columns.Add(columnName, columnName); } // Assign value to the corresponding cell dataGridView1.Rows[rowMap[key]].Cells[columnName].Value = value; // Assign multiplier to X row (if applicable) if (multiplier > 1) { dataGridView1.Rows[0].Cells[columnName].Value = multiplier; } // Track the last column name for future processing lastColumnName = columnName; }