У меня возникла проблема динамического добавления столбцов в GridView. Мне нужно изменить макет - то есть включенные столбцы - на основе значения в DropDownList. Когда пользователь меняет выбор в этом списке, мне нужно удалить все, кроме первого столбца, и динамически добавлять дополнительные столбцы на основе выбора.Добавление динамических столбцов в ASP.NET Gridview
У меня есть только один столбец, определенный в моей разметке - столбец 0 столбца шаблона, в котором я объявляю ссылку «Выбрать» и ссылку на LinkButton другого приложения. Эта колонка всегда должна быть там. Когда выполняется ListBoxSelection, я удаляю все, кроме первого столбца, а затем повторно добавляю нужные столбцы (в этом примере я упростил его, чтобы всегда добавлять столбец «Заголовок»). Вот часть кода:
RemoveVariableColumnsFromGrid();
BoundField b = new BoundField();
b.DataField = "Title";
this.gvPrimaryListView.Columns.Add(b);
this.gvPrimaryListView.DataBind();
private void RemoveVariableColumnsFromGrid() {
int ColCount = this.gvPrimaryListView.Columns.Count;
//Leave column 0 -- our select and view template column
while (ColCount > 1) {
this.gvPrimaryListView.Columns.RemoveAt(ColCount - 1);
--ColCount;
}
}
В первый раз этот код проходит через, я вижу, как статический столбец и динамически столбец добавляется «Title». Однако в следующий раз, когда будет сделан выбор, первый столбец будет сгенерирован пустым (ничего в нем). Я вижу столбец заголовка, и я вижу первый столбец слева от него, но в нем ничего не генерируется. В отладчике я вижу, что gvPrimaryListView действительно имеет два столбца, а первый (индекс 0) действительно является столбцом шаблона. Фактически, столбец даже сохраняет свою ширину, которая установлена в 165px в разметке ниже (для целей отладки).
Любые идеи?
<asp:GridView ID="gvPrimaryListView" runat="server" Width="100%" AutoGenerateColumns="false"
DataKeyNames="Document_ID" EnableViewState="true" DataSourceID="odsPrimaryDataSource"
AllowPaging="true" AllowSorting="true" PageSize="10" OnPageIndexChanging="activeListView_PageIndexChanging"
AutoGenerateSelectButton="False" OnSelectedIndexChanged="activeListView_SelectedIndexChanged"
Visible="true" OnRowDataBound="CtlDocList_RowDataBound" Font-Size="8pt" Font-Names="Helvetica">
<Columns>
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<asp:LinkButton EnableTheming="false" ID="CtlSelectDocRowBtn" runat="server" Text="Select"
CommandName="Select" CssClass="gridbutton" OnClick="RowSelectBtn_Click" />
<asp:ImageButton EnableTheming="false" ID="DocViewBtn" runat="server" ImageUrl="../../images/ViewDoc3.png"
CssClass="gridbutton" CommandName="Select" OnClick="DocViewBtn_Click" />
</ItemTemplate>
<ItemStyle Width="165px" />
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
<asp:Label ID="Label6" runat="server" Text="No rows found." SkinID="LabelHeader"></asp:Label>
</EmptyDataTemplate>
</asp:GridView>
Просто некоторая дополнительная информация.
Это не имеет никакого отношения к тому факту, что это первый столбец, но все связано с тем, что это TemplateField. Если я поместил нормальный столбец влево (в разметке) и сдвинул столбец TemplateField вправо, первый столбец отобразится отлично, а столбец (теперь второй) TemplateField исчезнет.
Еще одна странная вещь: проблема не в том, что первая обратная передача - ИЛИ ВТОРАЯ - но она начинается с третьей обратной передачи, а затем продолжается для последующих обратных передач. Я в тупике.
Я делаю то же самое, чтобы динамически добавлять столбцы в коде Однако проблема заключается в том, что я добавляю 20 + столбцов динамически, для каждого цикла замедляется вся страница, есть ли у вас такая же проблема? – Princa 2013-11-25 14:33:04