C # пользовательское форматирование отображаемых данных столбца таблицы данных без изменения базовых значений - PullRequest
2 голосов
/ 13 января 2012

У меня есть сетка данных, заполняемая коллекцией объектов.значения в первом столбце похожи на:

"SOMEDISPLAYTEXT # T: \ blasndw \ lwwdjawn \ wjnawdja"

"somedisplaytext # T: \ kndwla \ igrhysbv \ kjnfak"

Я не хочу изменять эти значения, так как я также постоянно обновляю их, однако, я хочу, чтобы в datagridview отображалась только первая часть этой строки 'somedisplaytext', но не довключая «#» .. без изменения базовых значений.

Ответы [ 2 ]

3 голосов
/ 13 января 2012

Если вы используете WinForms:

Согласно MSDN (http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellformatting.aspx), вы можете обработать событие CellFormating объекта DataGridView и затем изменить способ форматирования значения.

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);
    }
}

Этот первый метод изменит цвет фона, если столбец Artist содержит «pink», и изменит формат значений в столбце «Date Release» следующим способом:

Вы можете увидетьздесь вам просто нужно заменить свойство Value объекта DataGridViewCellFormattingEventArgs

//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 голос
/ 13 января 2012

Одним из способов может быть создание свойства в вашем классе, которое возвращает форматированный текст

public PropertyForDisplay
{
    get
    {
       String[] array = OriginalProperty.Split('#');
       if(array.Length > 0)
           return array[0] ;

       return String.Empty;
    }
}
...