【问题标题】:How to arrange datatable columns inside gridview?如何在gridview中排列数据表列?
【发布时间】:2013-03-20 04:41:27
【问题描述】:

我的 gridview 有一个从 aspx 设计器绑定的模板字段。我正在将数据表绑定到它。现在,我的模板字段(包含几个操作按钮)将作为第一列出现。有没有办法在模板字段之前排列数据表列?

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

我需要将模板字段放在最后。 col1、col、col3 是从数据表中获取的。

【问题讨论】:

  • “将数据表添加到它”是什么意思?你能给我们举个例子,或者给我们看一些你试过的代码吗?
  • @Melanie,请检查更新后的问题。

标签: c# asp.net gridview aspxgridview


【解决方案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>

【讨论】:

  • BoundField 在运行时指定。这无济于事。
  • AutoGenerateColumns="True" 列是在运行时生成的,但是,当您通过设置 AutoGenerateColumns="False" 禁用列自动生成时,只会显示由 BoundField 声明的列。
【解决方案2】:

您必须为数据表中所需的每一列使用模板字段。在模板字段中使用标签来显示文本,使用 &lt;%#Bind("yourColumnName")%&gt; 作为文本属性。这样,您可以按照您希望的任何顺序排列列。还要在 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>

【讨论】:

  • 如何从后面的代码中绑定列?在这种情况下,我可能还需要从后面的代码中绑定模板字段,对吧?
  • 不,您只需像现在一样创建数据表并将您的网格视图绑定到数据表。在您的 gridview 上,您将自动生成列设置为 false 并为每个想要的列定义模板字段。在每一列中,您删除一个标签控件并使用我在帖子中所说的 Bind 属性与数据表中的所需列绑定。
  • 我的列字段是动态的。它不能直接定义到模板中。我找到了另一种解决方法。有效。我贴在这里
【解决方案3】:
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 . 

这东西对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多