【问题标题】:Using data to set properties of a GridView使用数据设置 GridView 的属性
【发布时间】:2009-02-04 14:48:26
【问题描述】:

我需要将 GridView 中 BoundField 的“ReadOnly”属性设置为记录集中由同一 GridView 显示的位字段的值。

我知道我可以在代码中实现这一点,但出于兴趣,我想知道是否可以使用 sn-p 在属性内以声明方式执行此操作?

干杯,

杰米

【问题讨论】:

    标签: c# webforms


    【解决方案1】:

    是的,您可以这样做。创建一个 TemplatedField 并在绑定语句中使用任一

    <%# ((Employee)Container.DataItem).IsApproved ? "yes" : "no" %>
    

    或者您可以使用代码隐藏中的方法

    <%# FormatBool(((Employee)Container.DataItem).IsApproved) %>
    

    其中 FormatBool 是代码隐藏中的属性

    protected string FormatBool(bool value)
    {
       if (value)
          return "yes";
       return "no";
    }
    

    【讨论】:

      【解决方案2】:

      如果您需要绑定到属性,我会使用 TemplateField,然后在那里设置行为。仅当您不能使用代码时才这样做,否则,这是您最好的选择。

      我认为没有办法直接绑定 BoundColumn 的细节。

      【讨论】:

        【解决方案3】:

        我无法找到一种方法来根据 DetailView 的数据以声明方式处理 BoundField 或 TemplateField 的属性。

        Bendewey 非常仁慈地假设我正在绑定到一个业务对象,而实际上我是在这个实例中直接处理数据 - 抱歉没有说清楚。

        我在后面的代码中的解决方案如下:

            protected void DetailsView1_DataBound(object sender, EventArgs e)
            {
                DetailsView dv = (DetailsView)sender;
        
                if (dv.DataItemCount > 0)
                {
                    DataRowView data = (DataRowView)dv.DataItem;
                    bool isFixed = (bool)data["IsFixed"];
        
                    if (isFixed)
                    {
                        dv.Rows[2].Enabled = false;
                        dv.Rows[6].Enabled = false;
                    }
                }
            }
        

        我很失望,我不得不引用我想按索引禁用的行。可能有一种方法可以通过它们的数据字段引用这些行,而无需遍历所有行,但我乍一看找不到。

        感谢您的帮助!

        【讨论】:

          猜你喜欢
          • 2020-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-13
          相关资源
          最近更新 更多