#c# #winforms #datagridview #string-formatting
#c# #winforms #datagridview #форматирование строки
Вопрос:
У меня есть данные, которые на сервере представлены в виде a smalldatetime
, но когда я возвращаю эти данные в свое приложение, они возвращаются мне как a string
. Это происходит по целому ряду причин, которые не относятся к этому вопросу.
Что я пытаюсь сделать, так это то, что когда эти данные заполняются в моем DataGridView, мне нужно отформатировать их как a datetime
, указав только дату без времени в формате « mm/dd/yyyy
. Я пробовал следующее, но данные остаются в формате « mm/dd/yyyy hh:mm
:
this.DataGridView.Columns[7].DefaultCellStyle.Format = "d";
Как я могу отформатировать этот столбец данных?
Комментарии:
1. Вы пробовали это: это. DataGridView. Столбцы[7]. DefaultCellStyle. Формат = «ММ / дд / гггг»; ?
2. Вы уверены, что ваша дата является
DateTime
(а не строкой), когда она входит в ваш dataridview? То, что вы говорите, предполагает, что нет.3. @GertArnold как я уже сказал, данные на сервере — это дата-время, но это строка, когда я получаю ее в своем приложении. Мне нужно преобразовать строку обратно в формат datetime для отображения
4. Я знаю, но ваш
Format
предназначен для обратного:DateTime
вString
, или вы конвертируете строковые данные перед заполнением сетки?5. данные представляют собой строку до заполнения сетки.
Ответ №1:
Используйте столбец.DefaultCellStyle.Отформатируйте свойство или задайте его в конструкторе
или
dataGridView1.Columns[0].DefaultCellStyle.Format = "MM'/'dd'/'yyyy";
или
Вы можете установить нужный формат:
dataGridViewCellStyle.Format = "MM/dd/yyyy";
this.date.DefaultCellStyle = dataGridViewCellStyle;
// date being a System.Windows.Forms.DataGridViewTextBoxColumn
вы можете сделать так….
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
// If the column is the Artist column, check the
// value.
if (this.dataGridView1.Columns[e.ColumnIndex].Name == "Artist")
{
if (e.Value != null)
{
// Check for the string "pink" in the cell.
string stringValue = (string)e.Value;
stringValue = stringValue.ToLower();
if ((stringValue.IndexOf("pink") > -1))
{
e.CellStyle.BackColor = Color.Pink;
}
}
}
else if (this.dataGridView1.Columns[e.ColumnIndex].Name == "Release Date")
{
ShortFormDateFormat(e);
}
}
//Even though the date internaly stores the year as YYYY, using formatting, the
//UI can have the format in YY.
private static void ShortFormDateFormat(DataGridViewCellFormattingEventArgs formatting)
{
if (formatting.Value != null)
{
try
{
System.Text.StringBuilder dateString = new System.Text.StringBuilder();
DateTime theDate = DateTime.Parse(formatting.Value.ToString());
dateString.Append(theDate.Month);
dateString.Append("/");
dateString.Append(theDate.Day);
dateString.Append("/");
dateString.Append(theDate.Year.ToString().Substring(2));
formatting.Value = dateString.ToString();
formatting.FormattingApplied = true;
}
catch (FormatException)
{
// Set to false in case there are other handlers interested trying to
// format this DataGridViewCellFormattingEventArgs instance.
formatting.FormattingApplied = false;
}
}
}
не могли бы вы, пожалуйста, перейти по этой ссылке для получения дополнительной информации
Комментарии:
1. Ни то, ни другое не работает. данные по-прежнему отображаются с указанием даты и времени.
2. Моя datagrid привязывается после того, как я верну свои данные. DataBindingSource. Источник данных = DataSet.vwMyView;
Ответ №2:
Для C / CLI:
Exemple: 12.12.20 12:13:01
System::String^ format = "dd.MM.yyyy HH:mm::ss";
dataGridView_Archive->Columns[1]->DefaultCellStyle->Format = format;