2009-12-08 76 views
0

我有一个dataGridView,其中有一个名为Date Due的列,该列的类型为System.DataTime。我想把这些日期放在一个月的日历中。我必须遍历列吗?我必须施放它吗?获取dataGridTextboxColumn的所有值

+0

这是网站或表单应用程序吗?我认为它是窗体(datagridviewtextboxcell)。 – TheVillageIdiot 2009-12-08 06:37:06

+0

是的。这是一个winforms应用程序。 – 2009-12-08 12:37:16

回答

1

从每列获取日期是的,你必须遍历列中的所有行。由于您将文本显示为文本,因此需要使用DateTime.ParseDateTime.TryParse方法进行解析。

编辑: - 假设这是一个表单应用程序。我加了一个DataGridView,一个MonthCalendar和一个Button。我能够从gridview中获取日期,并在月份cal中加粗所选日期。

public Form2() 
{ 
    InitializeComponent(); 

    CreateData(); 
} 

private void CreateData() 
{ 
    var dtb = new DataTable(); 
    dtb.Columns.Add("Column1"); 
    dtb.Columns.Add("Column2"); 
    dtb.Columns.Add("Column3"); 

    var dt = DateTime.Now; 
    var rand = new Random(); 

    for (var i = 0; i < 10; i++) 
    { 
     var r = dtb.NewRow(); 

     r.ItemArray = new object[] {dt.ToString("ddd"), dt.ToString("MMM"), dt}; 
     dt = dt.AddDays(rand.Next(30)); 

     dtb.Rows.Add(r); 
    } 

    dataGridView1.DataSource = dtb; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    var bds = new List<DateTime>(); 
    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     DateTime dt; 
     var b = DateTime.TryParse(row.Cells[row.Cells.Count - 1].Value+"", out dt); 
     if(!b) continue; 

     bds.Add(dt); 
    } 

    cal.BoldedDates = bds.ToArray(); 
} 
+0

没有工作。我已经有了一个DataSet作为DataGrid的DataSource。有更容易的方法吗? – 2009-12-09 01:41:13

+0

当添加新行时,我还将使用'MonthCalendar.UpdateBoldedDates()'方法。不需要按钮。 – 2009-12-09 01:48:42

+0

然后你忽略创建'DataTable'和绑定的东西。当添加新行时,您可以处理该事件并从相应列中获取数据。 – TheVillageIdiot 2009-12-09 02:22:25