【问题标题】:replacing the autogenerated checkbox feild with radio button in a Autogenerated columns Grid View用自动生成的列网格视图中的单选按钮替换自动生成的复选框字段
【发布时间】:2011-08-08 14:21:29
【问题描述】:

我有一个自动生成列的网格视图。绑定数据表将有一个 Bit(Boolean) 列。现在绑定数据时,会生成复选框字段来代替位列。

要求

复选框字段需要替换为单选按钮列表,根据上面提到的位列,有两个选项,批准和拒绝。

约束

我无法将自动生成的列设置为 false,因为网格视图中的列数会根据选择的过滤器而有所不同。但每次都有位列。

【问题讨论】:

    标签: asp.net gridview autogeneratecolumn datafield


    【解决方案1】:

    您需要编写自己的CustomeField/Custom GridView Column 类。如果你在网上用“GridView Custom field”搜索,你会得到很多例子。 AutoGenerateColumns 与它一起工作。需要在代码隐藏中编写很多代码:)

    【讨论】:

    • 看起来是一个非常漫长的过程。是否有任何查找和替换 Row 数据绑定或任何其他网格视图事件上的复选框控件的方法?
    【解决方案2】:

    您可以将模板字段与自动生成列一起使用。

    【讨论】:

      【解决方案3】:

      经过对 Google 的长期研究。我得到了解决方案,但它看起来不是一个令人信服的解决方案。

      protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
      {
          int Cellix = -1;
          Cellix = GetBooleanCellIndex(e.Row);
          if (Cellix != -1)
          {
              if (e.Row.RowType == DataControlRowType.DataRow)
              {
                  RadioButtonList rbnl = new RadioButtonList();
                  rbnl.ID = "rbn_Status";
                  rbnl.RepeatDirection = RepeatDirection.Horizontal;
                  rbnl.Items.Add(new ListItem("Open", "0"));
                  rbnl.Items.Add(new ListItem("Close", "1"));
                  rbnl.SelectedValue = Convert.ToInt16(DataBinder.Eval(e.Row.DataItem, "status")).ToString();
                  e.Row.Cells[Cellix].Controls.Clear();
                  e.Row.Cells[Cellix].Controls.Add(rbnl);
              }
          }
      }
      
      private int GetBooleanCellIndex(GridViewRow gvrow)
      {
          int CellIndex = 0;
          Boolean dummy = true;
          foreach (DataControlFieldCell cell in gvrow.Cells)
          {
              AutoGeneratedField At = null;
              if (cell.ContainingField.GetType().Name == "AutoGeneratedField")
              {
                  At = (AutoGeneratedField)cell.ContainingField;
                  if (At.DataType.Name == dummy.GetType().Name)
                      return CellIndex;
                  CellIndex++;
              }
          }
          return -1;
      }
      

      所以我期待你们进一步改进。

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 2016-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多