Почему findcontrol в GridView не работает после таблицы.колонки.removeat
Я хочу иметь элемент управления gridview в C#.net что он может переключаться между 15 и 10 столбцами в зависимости от булевой переменной.
У меня есть здесь метод, в котором я передам DataTable, и он визуализирует его должным образом.
private void RenderDataTableToGrid(DataTable dt) { //initialize controls int gvcolCount = gvMandayEntry.Columns.Count; pjkMain = itfinance_dataload_pjk.GetPjkMainRecord(PjkId); IsCarryFoward = IsProjectCarryForward(pjkMain); List<xreffy> FYlist = XrefTable(dt); for (int cols = 2; cols < dt.Columns.Count; cols++) { gvMandayEntry.Columns[cols].HeaderText = dt.Columns[cols].ColumnName; } if (!IsCarryFoward) { while (dt.Columns.Count != gvMandayEntry.Columns.Count) { gvMandayEntry.Columns.RemoveAt(12); } } //Load Data gvMandayEntry.DataSource = dt; gvMandayEntry.DataBind(); for (int x = 0; x < dt.Rows.Count; x++) { Label Category = (Label)gvMandayEntry.Rows[x].Cells[0].FindControl("Categories"); Label Type = (Label)gvMandayEntry.Rows[x].Cells[1].FindControl("Type"); Category.Text = dt.Rows[x][0].ToString(); Type.Text = dt.Rows[x][1].ToString(); for (int y = 2; y < dt.Columns.Count; y++) { TextBox txt = (TextBox)gvMandayEntry.Rows[x].Cells[y].FindControl(FYlist.Find(fy => fy.finyear == dt.Columns[y].ColumnName).control_name); txt.Text = dt.Rows[x][y].ToString(); } } divMandaysEntry.Visible = true; Session["dtManday"] = dt; }Когда пользователю приходит время нажать кнопку Сохранить, логика кода заключается в том, чтобы перечитывать GridView для каждой строки с помощью "FindControl".
Это прекрасно работает, если gvMandayEntry.Столбцы.RemoveAt(12); строка из RenderDataTableToGrid не была выполнена во время выполнения.
Но если он выполняется, то FindControl возвращает Null.
for (int x = 0; x < gvMandayEntry.Rows.Count; x++) { Label Category = (Label)gvMandayEntry.Rows[x].Cells[0].FindControl("Categories"); Label Type = (Label)gvMandayEntry.Rows[x].Cells[1].FindControl("Type"); int manday_category_id = MdCatList.Find(mdcat => mdcat.name == Category.Text).id; int pex_id = ExpenseType.Find(pex => pex.name == Type.Text).id; int manday_id = MdList.Find(mditm => mditm.mandays_categories_id == manday_category_id && mditm.pex_id == pex_id).id; }
Что я уже пробовал:
Если GridView не изменяется во время выполнения кода, FindControl работает.
0x01AA
Вы удалили колонку и теперь ожидаете, что найдете ее позже?
Подумайте о том, что вместо удаления столбца вы просто установите значение Visible в false.
Zaldy1028
Привет... спасибо, что заглянули в это дело. Колонна, которую я пытался убрать, находилась на дальнем краю сетки. Ярлык, который я пытался наложить, был на первой и второй колонках. Или будет иметь значение для остальных?
Я попробую установить видимое значение false.
0x01AA
Уупс, извини. В таком случае забудьте мой комментарий :)
Zaldy1028
Спасибо за помощь. Думаю, на данный момент у меня есть обходной путь.