如何在dataGridView单元格中找到包装线的位置?

时间:2013-02-22 14:23:19

标签: c# datagridview

我有一个多行的DataGridView,您如何在字符串Cell.Value中找到自动换行的位置?

2 个答案:

答案 0 :(得分:1)

    string testLength = "1";
    private void DataSheets_Load(object sender, EventArgs e) //DataGridView, 2 columns
    {
        clmData.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
        Data.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
        Data.DefaultCellStyle.Font = new Font("Courier", 8);
        RunWidth();
    }

    void RunWidth()
    {
        int l1 = len(testLength);
        int l2 = len(testLength + testLength);
        int perChar = l2 - l1;
        int pad = l1 - perChar;
        int s7 = pad + (perChar * 75);
        int s5 = pad + (perChar * 50);
        Data.Columns[0].Width = s7;
        Data.Columns[1].Width = s5;
    }
    public int len(string text)
    {
        Size te = TextRenderer.MeasureText(text, new Font("Courier", 8));
        return te.Width;
    }

我自己解决了这个问题,但是如果有人找到更多方法来找到适用的类似功能,请继续发布结果。

答案 1 :(得分:0)

仅仅因为它有很多好的信息:
Here's a very well elaborated answer on differences between TextRenderer.MeasureText() and Graphics.MeasureString()

我有一个类似的问题;我想知道通过包装when drawing a DataGridViewRow by myself(代码是C ++ / CLI)创建了多少行:

void PaintRow (Object^ sender, DataGridViewRowPrePaintEventArgs^ e)
{
...
    int iCharacters = 0, iLines = 0;
    SizeF oLayoutArea ((float)dgvRow->Cells[ixCell]->Size.Width, 0);
    SizeF oTextSize = e->Graphics->MeasureString (sText,
                                        dgvRow->Cells[ixCell]->InheritedStyle->Font,
                                        oLayoutArea,
                                        oStringFormat,
                                        iCharacters,
                                        iLines);

关于你的问题:
我会采用相同的代码,并找出完整字符串创建了多少行,例如2行。
然后取一半的字符串,并检查你得到多少行,例如1行。
因为它之前的线条较少,我会再次采用更多文本(总是差异的一半)并再次测试。 继续,直到你把它分解为一个角色,并得到适合的长度而不包裹。