【问题标题】:How do I use different Fields in the same column in a DataGridView如何在 DataGridView 的同一列中使用不同的字段
【发布时间】:2009-02-20 06:29:31
【问题描述】:

我有一种可能很独特的情况,我需要将单个列用于两个不同的交替值。

我的数据有单独的日期和时间列。这不是我的选择,我必须忍受它。行以“对”形式显示 第 1 行和第 2 行是同一功能单元的一部分,但它们在数据库中是单独的行。在网格中,第 1 行第 1 列必须使用日期列,而在第 2 行中,第 1 列是时间列。这对每个偶数行和奇数行重复。请参阅下面的 ASCII 绘图。

是否可以将一个单元格隐藏在一行而不是另一行,然后使两个字段共享一个共同的列标题?

如果您知道可以使此功能更容易实现的其他网格,我也愿意使用其他网格。

-----------------------------------------------------------------
|Date/Time| ......
=================================================================
|1/1/2008 | .......
|10:00pm  | .......
-----------------------------------------------------------------
|1/2/2008 | .......
|7:00pm   | .......
-----------------------------------------------------------------
...
...
...

【问题讨论】:

    标签: c# .net winforms datagridview


    【解决方案1】:

    如果您可以控制进入系统的数据馈送,比如 SQL 存储过程,那么这样的事情呢?

    SELECT 
       ROWID AS 'ID'
       , MYDATE + MYTIME AS 'MYDATETIME'
    FROM
       MYTABLE
    

    如果您无法控制数据源,我建议您使用 on Row_Databound 事件并更改单元格的文本以满足您的需要。这可能意味着您使单元格 3 等于单元格 3 + 单元格 4,然后隐藏单元格 4...但无论哪种方式,Row_Databound 都可能非常适合...

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //ASSUMES COLUMN 2 IS DATE
            //AND COLUMN 3 IS TIME
            e.Row.Cells[2].Text = e.Row.Cells[2].Text + " " + e.Row.Cells[3].Text;
            e.Row.Cells[3].Visible = false;
        }
    }
    

    【讨论】:

    • 这是一个有趣的想法,我可以在 SQL 中创建一个组合的日期时间计算字段,然后根据行号在网格中格式化我的代码。这可能行得通。
    【解决方案2】:

    我会将数据库重构为更合乎逻辑的格式,然后继续。

    如果您绝对不能更改数据库,我可能会包装 GridView 并添加您需要处理特殊情况数据的自定义功能。

    【讨论】:

    • 正如我所说,我不能那样做。数据库由第三方应用提供,如果我更改数据库,我会破坏应用。
    • 这是一个相当模糊的答案,你不觉得吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多