2013-03-29 2 views
2

내 gridview에 aspx 디자이너에서 바인딩 된 템플릿 필드가 있습니다. 데이터 테이블을 바인딩하고 있습니다. 이제 작업 버튼이 거의없는 템플릿 필드가 첫 번째 열로 표시됩니다. 템플릿 필드 앞에 datatable 열을 정렬 할 수있는 방법이 있습니까? 의 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 코드 :

TemplateField | Col1 | Col2 | Col3 

내가 할 수있는 Templatefield 필요합니다

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

위의 코드는 같은 그리드 뷰 헤더를 보여줍니다 마지막으로 오게. col1, col, col3은 데이터 테이블에서 가져옵니다.

+0

"데이터 테이블을 그 앞에 추가"한다는 것은 무엇을 의미합니까? 우리에게 예제를 주거나 시도한 코드를 보여줄 수 있습니까? – 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

데이터 테이블에서 원하는 각 열에 대해 템플릿 필드를 사용해야합니다. 텍스트 필드에 <%#Bind("yourColumnName")%>을 사용하여 텍스트를 표시하려면 템플릿 필드 안의 레이블을 사용하십시오. 그렇게하면 원하는 순서대로 열을 배치 할 수 있습니다. 또한 gridview에 autogenerate columns to false을 설정하십시오.

<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을 만들고 당신이 지금하고있는 것처럼 datatable에 gridview 바인딩합니다. gridview에서 자동 생성 열을 false로 설정하고 원하는 각 열의 템플릿 필드를 정의합니다. 각 열 내부에서 레이블 컨트롤을 놓고 내 게시물에서 말한대로 Bind 속성을 사용하여 데이터 테이블의 원하는 열에 바인딩합니다. –

+0

내 컬럼 필드는 동적입니다. 템플릿에 직접 정의 할 수 없습니다. 나는 또 다른 일을 발견했다. 그것은 효과가 있었다. 여기에 붙여 넣을거야. – NewBie