【问题标题】:What is the correct way to format SPGridView values being displayed?格式化正在显示的 SPGridView 值的正确方法是什么?
【发布时间】:2010-11-21 05:43:04
【问题描述】:

问题

众所周知,SharePoint 以纯文本形式将数据保存在数据库中。某些字段甚至具有连接字符串,例如 <id>;#<value> 用于用户字段。百分比保存为双精度数(1.00000000000000 表示 100%)等等。

当然,我想在列表中显示数据。

我该怎么办?

我是否应该使用派生的 SPBoundField 来格式化值(我实际上是这样做的,并且在您想要过滤之前它工作正常(可能 SPBoundField 不会格式化我的值,因为我使用 ObjectDataSource 而不是列表并且使用反射器我看到是否有 SPListItems数据源,然后它的格式正确。不是我的情况)

alt text http://img199.imageshack.us/img199/2797/ss20090820110331.png

或者我必须遍历所有数据表并相应地格式化每一行吗?

你的技术是什么?

谢谢。

【问题讨论】:

    标签: sharepoint formatting spgridview


    【解决方案1】:

    我建议在将值绑定到 spgridview 之前对其进行格式化。优先使用 Linq 和匿名类型,或者在绑定时需要格式化的字段上调用代码隐藏函数。

    DataField='<%# FormatUserField(Eval("UserFieldName")) %>'
    

    或者...可能是模板字段?

    【讨论】:

    • Im wondering if i can use SPField's somehow? They have the logic inside, but im 想知道我是否可以让他们完成这项工作,然后将它们放在 gridview 上?
    【解决方案2】:

    这里有几个选项。我不知道所有这些的输出(这将是一篇很好的博客文章),但其中一个应该做你想做的:

    如果您想使用原始值,请查看SPField*XYZ*Value 类,这可能也很方便。例如,您提到的表单&lt;id&gt;;#&lt;value&gt; 由类 SPFieldUserValue 表示。您可以非常轻松地传递raw text to its constructor 并提取IDvalue 和最有用的User

    【讨论】:

    • 我试过 getter 函数,它很好地格式化了输出,但是它没有在过滤器下拉列表中显示格式化的值。
    • 嗯,好的。由于防火墙在我端阻止它,我看不到您的图像。在这种情况下,您可能需要“预处理”这些值。也许使用 DataBinding 事件?
    【解决方案3】:

    我通常使用从 ITemplate 继承的 ItemTemplate。在 ItemTemplate 中,我使用 SPFieldxxxValue 类或一些自定义格式代码。这样可以避免循环遍历 DataTable,并且可以重用 ItemTemplates。

    ItemTemplates 附加在列绑定中 E.G

    // Normal Data Binding
    SPBoundField fld = new SPBoundField();
    fld.HeaderText = field.DisplayName;
    fld.DataField = field.InternalName;
    fld.SortExpression = field.InternalName;
    grid.Columns.Add(fld);
    
    // ItemTemplate Binding
    TemplateField fld = new TemplateField();
    fld.HeaderText = field.DisplayName;
    fld.ItemTemplate = new CustomItemTemplateClass(field.InternalName);
    fld.SortExpression = field.InternalName;
    grid.Columns.Add(fld);
    

    ItemTemplate 示例

    public class CustomItemTemplateClass : ITemplate
    {
        private string FieldName
        { get; set; }
    
        public CustomItemTemplateClass(string fieldName, string formatString)
        {
            FieldName = fieldName;
        }
    
        #region ITemplate Members
    
        public void InstantiateIn(Control container)
        {
            Literal lit = new Literal();
            lit.DataBinding += new EventHandler(lit_DataBinding);
            container.Controls.Add(lit);
        }
        #endregion
    
        void lit_DataBinding(object sender, EventArgs e)
        {
            Literal lit = (Literal)sender;
            SPGridViewRow container = (SPGridViewRow)lit.NamingContainer;
            string fieldValue = ((DataRowView)container.DataItem)[FieldName].ToString();
    
            //Prosses Filed value here
            SPFieldLookupValue lookupValue = new SPFieldLookupValue(fieldValue);
    
            //Display new value
            lit.Text = lookupValue.LookupValue;
        }
    }
    

    【讨论】:

    • 呃,试过了,但是在过滤时,它仍然显示来自数据库的原始值。我可能会格式化数据表。
    • 感谢您发布此代码,它为我节省了很多时间!这是我在一小时内通过 Internet 找到的使用 Data Binding 和 ItemTemplate Binding 的最清晰示例!
    【解决方案4】:

    毕竟,我不知道有任何其他解决方案可以循环遍历 DataTable 行并相应地格式化它们。

    如果你的 SPGridView 的数据源是列表,试试SPBoundField

    【讨论】:

    • 我有同样的问题,尝试使用 SPBoundField,但我仍然得到“ID;#”前缀。
    【解决方案5】:

    这是我解决此问题的方法。

    <asp:TemplateField HeaderText="Campaign Members">
      <ItemTemplate> 
       <%# RemoveCharacters(Eval("CampaignMembers").ToString())%>
      </ItemTemplate> 
    </asp:TemplateField> 
    
    // Make sure declare using System.Text.RegularExpression;
    protected string RemoveCharacters(object String) 
    {
      string s1 = String.ToString(); 
      string newString = Regex.Replace(s1, @"#[\d-];", string.Empty); 
      newString = Regex.Replace(newString, "#", " "); 
      return newString.ToString();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-26
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 2011-09-17
      • 2017-09-14
      相关资源
      最近更新 更多