【问题标题】:changing order of boundfield in gridview在gridview中改变boundfield的顺序
【发布时间】:2011-10-10 12:59:35
【问题描述】:

我正在尝试开发一个应用程序,即在 Gridview 中显示的数据。 gridview 包含许多 boundfield 列。我最近在 gridview 的最后一个 boundfield 列(导入的 boundfield 列)的末尾添加了一列。所以我很少有机会将最后一个边界域移动到标记中的所需位置。如果我将列移动到所需的位置,那么我必须在行 _databounding 时修改整个编码。那么有什么方法可以在不改变标记的情况下重新排序列?? ..

<asp:BoundField DataField="someData" HeaderText="SomeData"> </asp:BoundField>
 <asp:CommandField UpdateText="Update" EditText="Edit" CancelText="|Cancel" ShowEditButton="true" ControlStyle-CssClass="LinkNormal" />
 <asp:BoundField DataField="someData2" HeaderText="Imported"> </asp:BoundField> 

输出将是这样的(编辑/删除/导入是绑定字段列)

一些数据 |更新|进口

我现在需要的 gridview 应该像这样显示

进口 |一些数据 |更新

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

    我建议不要使用列索引,而是开始使用数据键来引用代码隐藏中的列值。这样,您可以更改标记并移动列而不影响代码隐藏。

    <asp:GridView ID="GridView1" runat="server" DataKeyNames="Col1, Col2, Col3" ... >
    

    使用数据键,您可以在RowDataBound 事件中获取这样的列值:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        string col1 = GridView1.DataKeys[e.Row.RowIndex]["Col1"].ToString();
    }
    

    【讨论】:

      【解决方案2】:

      看来,GridView 没有这样的功能。相反,您可以尝试通过例如列的标题文本来获取代码中列的索引,下面是完成这项工作的函数:

      int getColumnIndexByHeaderText(GridView gridView, string headerText)
      {
          for (int i = 0; i < gridView.Columns.Count; ++i)
          {
              if (gridView.Columns[i].HeaderText == headerText)
                  return i;
          }
          return -1;
      }
      

      并使用它来代替硬编码的列索引。

      【讨论】:

      • 使用数据键将完全解决对列索引的需求。
      • @James,这取决于。如果索引仅用于检索数据,则数据键将是足够且优雅的解决方案。但是如果使用索引来设置列的可见性,那么使用数据键就不是很有帮助了。
      猜你喜欢
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 2012-02-16
      • 2013-09-10
      相关资源
      最近更新 更多