【问题标题】:how to set formatting date time on repositoryitem combobox?如何在repositoryitem组合框上设置格式化日期时间?
【发布时间】:2016-08-26 02:19:56
【问题描述】:

如何在我的 gridview 列中获取格式时间以在我的存储库中设置它? 数据库中的日期使用date time,它返回8/1/2016 12:00:00 AM的输出 我用这个方法设置在一个网格列中

    private void arrange()
    {

        gridView1.Columns["date"].VisibleIndex = 1;
        gridView1.Columns["date"].DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
        gridView1.Columns["date"].DisplayFormat.FormatString = "dd MMM yyyy";
        gridView1.Columns["date"].format.FormatString = "dd MMM yyyy";

        gridView1.Columns["date"].Width = 150;
    }

日期的gridcolumn上的显示是

问题是当我在过滤器行上使用存储库项时,它仍然从数据库中获取日期格式,即8/1/2016 12:00:00 AM。图片是这样的

将项目添加到存储库组合框中的代码是

    RepositoryItemComboBox repositoryItemComboBox2 = new RepositoryItemComboBox();

    private void gridView1_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
    {
        GridView view = sender as GridView;
        for (int i = 0; i < gridView1.RowCount; i++)
        {
            if (gridView1.GetDataRow(i) == null)
            {
                break;
            }
        string txt = gridView1.GetDataRow(i)["date"].ToString();
        if (!repositoryItemComboBox2.Items.Contains(txt))
            {                    
                repositoryItemComboBox2.Items.Add(txt);
            }
        }

        if (e.Column.FieldName == "date" && view.IsFilterRow(e.RowHandle))
            { e.RepositoryItem = repositoryItemComboBox2;

            repositoryItemComboBox2.Sorted = true;

            }
     }

我在想,如何解决这个问题:

  1. 如何真正转换日期列,而不是显示文本
  2. 格式化日期列
  3. 格式化存储库项组合框
  4. 使用原始格式,但在存储库 itembox 上更改显示文本,与我在列日期所做的相同
  5. 您的建议

n.b:我正在使用 devexpress

【问题讨论】:

    标签: c# winforms date gridview format


    【解决方案1】:

    改变

    string txt = gridView1.GetDataRow(i)["date"].ToString();
    

    string txt = Convert.ToDateTime(gridView1.GetDataRow(i)["date"].ToString()).Date.ToString("dd MMM yyyy");
    

    我测试过的代码...

    List<String> str = new List<String>();
    str.Add("2016-08-01 12:00:00 AM");
    str.Add("2016-08-02 12:00:00 AM");
    str.Add("2016-08-03 12:00:00 AM");
    str.Add("2016-08-04 12:00:00 AM");
    str.Add("2016-08-05 12:00:00 AM");
    str.Add("2016-08-06 12:00:00 AM");
    str.Add("2016-08-07 12:00:00 AM");
    str.Add("2016-08-08 12:00:00 AM");
    str.Add("2016-08-09 12:00:00 AM");
    
    
    foreach (var item in str)
    {
      repositoryItemComboBox1.Items.Add(Convert.ToDateTime(item).Date.ToString("dd MMM yyyy"));
    }
    

    【讨论】:

    • 我已经测试了你的代码,它可以工作。因为 row["date"] 不是时间格式而是字符串。所以我可以过滤它。您应该先尝试将 row["date"] 更改为日期时间格式,例如 DataRow row = dt.NewRow(); row["Date"] = "26 Aug 2016"; DateTime s = Convert.ToDateTime(row["date"]); var x = s.ToString("d"); dt.Rows.Add(x); 它不会被过滤。你可以先格式化row[date]中的数据试试看。然后使用剩余的代码?
    • 我将列类型更改为日期时间。还在工作。我在此解决方案中添加了新照片。检查一下!
    • 但那是一个搜索面板。你能修改我寄给你的样品吗?但不要修改 dt。因为假设它来自数据库。通过显示show auto filter row 并选择日期
    • 我又添加了两张照片。我复制了你的代码并粘贴到我的。仍然工作:(@DavidChopperField
    • 如果06 august 2016,单击下拉列表后会发生什么?它有过滤器还是只是一个无法过滤行格式日期的显示文本?
    【解决方案2】:

    更改repositoryItem的显示格式和编辑格式

     repositoryItemComboBox1.DisplayFormat.FormatString = "dd MMM yyyy";
     repositoryItemComboBox1.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
     repositoryItemComboBox1.EditFormat.FormatString = "dd MM yyyy";
     repositoryItemComboBox1.EditFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
    

    【讨论】:

    • 我把它放在哪里?因为我已经尝试过了。结果是我下拉时的数据仍然8/1/2016 12:00:00 AM,但在我选择它后,格式更改为dd MMM yyyy..下拉上的数据仍然使用数据库格式
    • 是的,我测试过,但它不工作。我为您添加了新的解决方案。希望它有效
    • 是的,不工作..这就是为什么我在考虑如何转换列日期格式而不是display text
    • 我已经用示例代码更新了我的新解决方案。 @DavidChopperField
    • 我还没有测试过,但是我曾经也使用过DateTime date = Convert.ToDateTime(gridView1.GetDataRow(i)["date"]); var xx = date.ToString("dd MMM yyyy"); 并将存储库项存储为xx,但是当我下拉和过滤时没有找到它,因为gridview 和下拉菜单之间的格式不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多