2013-03-29 3 views
2

В моем gridview есть поле шаблона, связанное с дизайнером aspx. Я привязываю к нему таблицу данных. Теперь мое поле шаблона, которое имеет несколько кнопок действий, приходит как первый столбец. Есть ли способ упорядочить столбцы данных перед полем шаблона?Как организовать столбцы данных в gridview?

код из конструктора для GridView:

<asp:GridView ID="JobListGrid" runat="server" AutoGenerateColumns="false" > 
<Columns> 
    <asp:TemplateField HeaderText="Actions"> 
    <ItemTemplate> 
     <div> 
     <asp:ImageButton ID="View" CssClass="imgbutton" ToolTip="View Pdf" runat="server" 
      CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>' ImageUrl="~/Content/pdf.PNG" CommandName="View" Width="36" Height="36" OnClientClick='<%# Eval("JobID", "OpenInNewWindow(\"{0}\").ToString()") %>' /> 
     </div> 
    </ItemTemplate> 
    </asp:TemplateField> 
</Columns> 
</asp:GridView> 

CS Код:

JobListGrid.DataSource = dataTableObj; 
JobListGrid.DataBind(); 

Приведенный выше код показывает вид сетки заголовки, как:

TemplateField | Col1 | Col2 | Col3 

Мне нужно TemplateField к приходите последним. Col1, col, col3 получаются из данных.

+0

Что вы подразумеваете под «prepend datatable to it»? Можете ли вы привести нам пример или показать нам какой-то код, который вы пробовали? – Melanie

+0

@Melanie, проверьте обновленный вопрос. – NewBie

ответ

1
var columns = JobListGrid.Columns.CloneFields(); //Will get all the columns bound dynamically to the gridview. 
var columnToMove = JobListGrid.Columns[0]; //My first column is Action Column 
JobListGrid.Columns.RemoveAt(0);   // Remove it 
JobListGrid.Columns.Insert(columns.Count - 1, columnToMove); // Moved to last 
JobListGrid.DataBind();     // Bind the grid . 

Эта вещь работает для меня.

1

Измените свой GridView следующим образом: для управления столбцами вам необходимо отключить AutoGenerateColumns.

<asp:GridView ID="JobListGrid" runat="server" AutoGenerateColumns="False"> 
       <Columns> 
        <asp:BoundField DataField="JobID" HeaderText="JobID" /> 
        <asp:BoundField DataField="JobName" HeaderText="Name" /> 
        <asp:TemplateField HeaderText="Actions"> 
         <ItemTemplate> 
         <div> 
          <asp:ImageButton ID="View" CssClass="imgbutton" ToolTip="View Pdf" runat="server" CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>' ImageUrl="~/Content/pdf.PNG" CommandName="View" Width="36" Height="36" OnClientClick='<%# Eval("JobID", "OpenInNewWindow(\"{0}\").ToString()") %>' /> 
         </div> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
</asp:GridView> 
+0

BoundField указывает на время выполнения. Это не поможет. – NewBie

+0

С 'AutoGenerateColumns =" ​​True "' столбцы генерируются во время выполнения, но когда вы отключите автоматическое создание столбцов, установив 'AutoGenerateColumns =" ​​False "', будут отображаться только столбцы, объявленные BoundField. –

0

Вы должны использовать поле шаблона для каждого столбца, который вы хотите получить из своего datatable. Используйте ярлык внутри поля вашего шаблона для отображения текста с использованием <%#Bind("yourColumnName")%> для свойства текста. Таким образом, вы можете организовать встречи в любом порядке. Также установите autogenerate columns to false в gridview. Что-то вроде

<asp:GridView ID="JobListGrid" runat="server" AutoGenerateColumns="false" > 
    <Columns> 
<asp:TemplateField HeaderText="myDataTableColumn1"> 
     <ItemTemplate>   
      <asp:Label ID="lblTest" runat="server" 
      Text='<%# Bind("yourDataTableColumnName") %>'></asp:Label> 
     <ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="Actions"> 
    <Columns> 
      <asp:ImageButton ID="View" CssClass="imgbutton" ToolTip="View Pdf" runat="server" 
       CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>' ImageUrl="~/Content/pdf.PNG" CommandName="View" Width="36" Height="36" OnClientClick='<%# Eval("JobID", "OpenInNewWindow(\"{0}\").ToString()") %>' /> 
      </div> 
     </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
    </asp:GridView> 
+0

Как связать столбцы, как это делается из кода позади? В этом случае мне может потребоваться привязать поле шаблона также от кода позади, правильно? – NewBie

+0

Нет, вы просто создаете datatable & привяжите свое gridview к datatable, как вы делаете сейчас. В вашем gridview вы устанавливаете столбцы автогенерации на false и определяете поля шаблонов для каждого столбца. Внутри каждого столбца вы бросаете элемент управления меткой и используете свойство Bind, как я сказал в своем сообщении, чтобы связать с нужной колонкой в ​​вашем datatable. –

+0

Мои поля Column являются динамическими. Он не может быть определен непосредственно в шаблоне. Я нашел еще одну работу. Это сработало. Я вложу его сюда – NewBie