C#自定义格式化datagridview列';s显示的数据,而不更改基础值

C#自定义格式化datagridview列';s显示的数据,而不更改基础值,c#,.net,visual-studio-2010,datagridview,string-formatting,C#,.net,Visual Studio 2010,Datagridview,String Formatting,我有一个datagridview,它由一组对象填充。 第一列中的值类似于: “SOMEDISPLAYTEXT#T:\blasndw\lwwdjawn\wjnawdja” “somedisplaytext#T:\kndwla\igrhysbv\kjnfak” 我不希望更改这些值,因为我也在不断更新它们,但是,我希望datagridview只显示字符串“somedisplaytext”的第一部分,最多包含但不包括“#”…而不更改基础值。一种方法是在类中创建一个返回格式化文本的属性 public Pr

我有一个datagridview,它由一组对象填充。 第一列中的值类似于:

“SOMEDISPLAYTEXT#T:\blasndw\lwwdjawn\wjnawdja”

“somedisplaytext#T:\kndwla\igrhysbv\kjnfak”


我不希望更改这些值,因为我也在不断更新它们,但是,我希望datagridview只显示字符串“somedisplaytext”的第一部分,最多包含但不包括“#”…而不更改基础值。

一种方法是在类中创建一个返回格式化文本的属性

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

       return String.Empty;
    }
}

一种方法是在类中创建一个返回格式化文本的属性

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

       return String.Empty;
    }
}
如果使用WinForms:

根据MSDN(),您可以处理DataGridView的CellFormating事件,然后更改值的格式化方式

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);
    }
}
如果列艺术家包含“粉色”,则第一种方法将更改背景色,并将使用以下方法更改列“发布日期”中值的格式:

您可以在这里看到,您只需替换DataGridViewCellFormattingEventArgs的Value属性

//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;
        }
    }
}
如果使用WinForms:

根据MSDN(),您可以处理DataGridView的CellFormating事件,然后更改值的格式化方式

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);
    }
}
如果列艺术家包含“粉色”,则第一种方法将更改背景色,并将使用以下方法更改列“发布日期”中值的格式:

您可以在这里看到,您只需替换DataGridViewCellFormattingEventArgs的Value属性

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

检查您是否在asp.net中执行此操作?检查您是否在asp.net中执行此操作?如果不清楚,可以将此属性绑定到网格列,而不是原始属性。当然,这将是一个只读列。如果不清楚,我们的想法是将此属性绑定到网格列,而不是原始属性。当然,这将是一个只读列。