【问题标题】:DataSet - Apply conditioning format of the entire column?DataSet - 应用整列的条件格式?
【发布时间】:2011-05-17 16:00:38
【问题描述】:

有没有办法将条件格式应用于数据集中的整个列?例如,以下是数据集的结果:

ID FullName Number

1 Testing 0

2 More Test [null]

3 Last Test 1

我希望能够格式化Number列,如果是0,那么我会显示空字符串,如果是null,那么我会显示NR,如果是1,那么我会显示T

谢谢。

【问题讨论】:

  • 您究竟在用输出数据做什么?更多的上下文将有助于确定一个好的解决方案。有许多不同的方法可以完成这项任务。
  • 嗨史蒂夫,我正在将此数据导出到文本/excel文件。谢谢。
  • @Saxman - 你用什么来导出数据,它是否支持任何类型的导出格式?
  • 它不支持格式化支持。而且我只想在导出之前操作数据格式以及一些数据。我想我可以一一循环遍历行/列。我希望有一种更简单/更快的方法。
  • @Saxman:你是通过网格控件导出这个吗?

标签: c# .net datatable dataset


【解决方案1】:

这完全取决于您如何使用 DataSet/DataTable - 这是 GridView 还是 FormView 的 DataSource,而您只想在数据绑定中提供不同的输出数据?还是您想进入并实际更改 DataSet 中存在的数据?

如果是前者,这里有一个基本的 GridView 示例,说明如何在数据绑定期间执行函数以提供不同的值(请参阅 Fill GridViewColumn with c# code 了解 VB.NET 示例):

<asp:GridView ID="gvExample" runat="server" DataSourceID="dsExample">
    <Columns>
        <asp:TemplateField HeaderText="Header Text">
            <ItemTemplate>
                <asp:Literal ID="litFunctionResult" runat="server" 
                    Text='<%# DoMyFunction(Eval("DataSourceField1") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

在你的代码隐藏中,添加如下内容:

Protected String DoMyFunction(Object field)
{
    int retValue;
    if (field == System.DBNull.Value)
        retValue = "NR";
    else if (Convert.ToInt32(field) == 0)
        retValue = "";
    else if (Convert.ToInt32(field) == 1)
        retValue = "T";
    else
        retValue = "uhoh?";

    return retValue;
}

编辑:引入了将其导出到 Excel 的事实……这可能不是特别方便。此外,您没有指定 ASP.NET,所以...除非您出于某种原因想要创建和数据绑定 GridView,否则这是没用的。我会在这里留下答案,以防有人遇到它。

【讨论】:

  • 我想更改返回的数据以导出到文件,而不是绑定到 gridview 或任何东西。谢谢。
  • 那你应该when改变你导出到文件的数据。
【解决方案2】:

我已经遍历 DataSet 以使其工作。不确定这是否是最好的方法:

for(int i = 0; i< ds.Tables[0].Rows.Count; i++)
{
    for(int j = 0; j < ds.Tables[0].Columns.Count; j++)
    {
        var columnName = ds.Tables[0].Columns[j].ColumnName;
        if(columnName == "Number")
        {
            ds.Tables[0].Rows[i][columnName] = SpecialFormat(columnName, ds.Tables[0].Rows[i]));
        }
    }
}

private string SpecialFormat(string column, DataRow dataRow)
{
    string value = dataRow[column].ToString();
    if (!string.IsNullOrEmpty(value))
    {
        if (value == "0")
            return "";
        if (value == "1")
            return "T";
    }
    return "";
}

【讨论】:

    【解决方案3】:

    数据集没有格式。它们只包含数据。如果你需要“格式化”它,那么你使用了错误的工具。

    【讨论】:

    • 我没有格式化数据集。我正在格式化来自数据集的数据。
    • 这不是您的问题所说的:“有没有办法将条件格式应用于数据集中的整个列?”
    • 我实际上在这方面支持 John,但鉴于您的局限性,您可能别无选择。通常,格式和表示与数据是分开的,但由于您要导出电子表格,除非您想手动编辑该电子表格,否则您必须对 DataSet 执行此操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    相关资源
    最近更新 更多