2012-03-30 3 views
4

У меня есть вид сетки и добавить столбцы к нему по коду:кнопка Место в последней колонке GridView

//Retrieve "Table" from database 
gridOffers.DataSource = table; 
gridOffers.DataBind(); 

Столбцы, добавленные кода добавляются после нажатия на кнопку, которая является не то, что мне нужно: enter image description here Как сделать так, чтобы кнопка «Добавить в корзину» была последней?

Источник GridView:

<Columns> 
      <asp:ImageField DataImageUrlField="ImageUrl" ControlStyle-Width="100" 
       ControlStyle-Height = "100" HeaderText = "Preview Image" 
       ItemStyle-HorizontalAlign="Center"> 
<ControlStyle Height="100px" Width="100px"></ControlStyle> 

<ItemStyle HorizontalAlign="Center"></ItemStyle> 
      </asp:ImageField> 
      <asp:TemplateField ShowHeader="False"> 
       <ItemTemplate> 
        <asp:Button ID="Button1" runat="server" CausesValidation="false" 
         CommandName="btnAddToCart" Text="Add To Cart" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
+0

Что сработало для вас? У меня такая же проблема – Sak

ответ

5

Вы определяете столбцы в источнике GridView И путем привязки источника данных к GridView. Поэтому у вас есть два источника столбцов; может быть или не быть гарантированный порядок, в который столбцы добавляются в GridView.

Вместо этого, почему не установить AutoGenerateColumns для GridView в ложных, а затем явно указать порядок столбцов с помощью BoundField для каждого поля, которое из источника данных в вашем GridView источника с последующим вашим изображением и кнопки столбцы?

+0

Я предполагаю, что он спрашивает, как управлять порядком столбцов, даже если 'AutoGenerateColumns' ** ** установлен на' true'. Заказ гарантирован, так как сначала будут созданы декларативно добавленные элементы управления, а затем создаются данные/вручную. Это задокументировано в [Жизненный цикл страницы] (http://msdn.microsoft.com/en-us/library/ms178472%28v=vs.80%29.aspx) (поисковые «средства управления, созданные декларативно»). –

+0

@Tim Schmelter: пока я верю, что вы правы с точки зрения порядка создания контроля, если я не пропущу что-то, ссылка на жизненный цикл страницы говорит только о том, что события Init и Load для элемента управления, добавленного во время выполнения, могут произойти позже, чем созданные элементы управления декларативно. Он включает элементы управления в шаблонах элементов управления, связанных с данными, с потенциально более поздними событиями. Поскольку OP явно не упоминал, что сохранение значений AutoGenerateColumns как True важно, я предложил решение, в котором вы можете четко указать свое намерение, то есть порядок столбцов является явным. – kaj

3

Я не знаю, если есть меньше Hacky путь, но вы можете использовать RowDataBound, чтобы изменить порядок, так что автогенерируемые колонны следуют другие ваши колонки:

protected void gridOffers_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    TableCell cell = e.Row.Cells[0]; 
    e.Row.Cells.RemoveAt(0); 
    //Move first to the end 
    e.Row.Cells.Add(cell); 
    cell = e.Row.Cells[0]; 
    e.Row.Cells.RemoveAt(0); 
    //Move second to the end 
    e.Row.Cells.Add(cell); 
} 
+0

+1, по моему опыту есть * не * менее хакерский способ сделать это, в то время как все еще есть автогенерированные столбцы. – jadarnel27

+0

+1, спасибо. Однако я могу обойтись без автоматически созданных столбцов, я просто не знал об этом. – David

1

У вас есть AutoGenerateColumns установлен на true на Gridview? Если это так, установите значение false и вручную установите поля в сетке, используя asp:BoundField, установив DataField на имя поля из источника данных.

Таким образом вы можете установить точный порядок своих столбцов.

+1

Вы можете видеть на изображении, что у него есть 'AutogenerateColumns = true' (« Auto-generate-fields »). Я предполагаю, что он спрашивает, как управлять порядком столбцов, даже если 'AutoGenerateColumns' ** ** установлен на' true'. –

Смежные вопросы