2009-11-02 65 views
0

我有一個DataGridView通過BindSource綁定到.sdf數據庫中的表。日期列顯示日期,如「d/M/yyyy HH:mm:ss」。 e .:「27/2/1971 00:00:00」。從SQLCE格式化日期以顯示在DataGridView中

我想讓它只顯示「27/02/1971」代替它。我嘗試應用DataGridViewCellStyle {format = dd/MM/yyyy},但沒有任何反應,其他預構建格式的事件。

另一方面,有一個帶有「dd/MM/yyyy」掩碼的MasketTextBox窗體,它綁定到同一列,並在顯示之前使用Parse和Format事件處理程序併發送它到數據庫。

Binding dataNascimentoBinding = new Binding("Text", this.source, "Nascimento", true); 
dataNascimentoBinding.Format += new ConvertEventHandler(Util.formatDateConvertEventHandler); 
dataNascimentoBinding.Parse += new ConvertEventHandler(Util.parseDateConvertEventHandler); 
this.dataNascimentoTxt.DataBindings.Add(dataNascimentoBinding); 


    public static string convertDateString2DateString(string dateString, string inputFormat, string outputFormat) 
    { 
     DateTime date = DateTime.ParseExact(dateString, inputFormat, DateTimeFormatInfo.InvariantInfo); 
     return String.Format("{0:" + outputFormat + "}", date); 
    } 

    public static void formatDateConvertEventHandler(object sender, ConvertEventArgs e) 
    { 
     if (e.DesiredType != typeof(string)) return; 
     if (e.Value.GetType() != typeof(string)) return; 

     String dateString = (string)e.Value; 
     e.Value = convertDateString2DateString(dateString, "d/M/yyyy HH:mm:ss", "dd/MM/yyyy"); 
    } 

    public static void parseDateConvertEventHandler(object sender, ConvertEventArgs e) 
    { 
     if (e.DesiredType != typeof(string)) return; 
     if (e.Value.GetType() != typeof(string)) return; 

     string value = (string)e.Value; 

     try 
     { 
      e.Value = DateTime.ParseExact(value, "dd/MM/yyyy", DateTimeFormatInfo.InvariantInfo); 
     } 
     catch 
     { 
      return; 
     } 
    } 

喜歡,你可以通過它expexted該日期從SQL未來將是一個日期時間值是其列,但我的事件處理程序正在接收一個字符串,而不是代碼中看到。同樣,解析的結果日期應該是日期時間,但也是一個字符串。

我很困惑處理這個日期時間列。

回答

1

發現問題。列類型必須在DataSet視圖中設置爲您希望在應用程序中使用的類型。因此,如果您只是使用Parse和Format方法將其更改爲DateTime,則即使用戶更改PC語言環境,也是安全的。

做完之後,DataGridView中的格式開始工作。