DataSet - 应用整个列的调节格式?

时间:2011-05-17 16:00:39

标签: c# .net datatable dataset

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

ID FullName Number

1 Testing 0

2 More Test [null]

3 Last Test 1

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

感谢。

3 个答案:

答案 0 :(得分: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,否则这是无用的。我会在这里留下答案,万一有人碰巧。

答案 1 :(得分:0)

我遍历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 "";
}

答案 2 :(得分:0)

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