Получение подстроки приводит к ошибке - PullRequest
2 голосов
/ 21 февраля 2012

У меня есть следующая строка:

if ( dataGridView1.Rows[i].Cells[0].Value.ToString().Length >= 13 ){      
                e.Graphics.DrawString
(dataGridView1.Rows[i].Cells[0].Value.ToString().Substring(0,14),
print6B, Brushes.Black, x-10, 130 + height);
                }
                else {

Из-за метода Substring я получаю эту ошибку: Индекс и длина должны указывать на местоположение в строке c #

Каков наилучший способ получить первые 14 символов строки?

Ответы [ 4 ]

3 голосов
/ 21 февраля 2012

Это будет хорошо работать, если - это 14 символов, но не будет, если будет менее 14 символов. Вы можете написать свой собственный метод расширения:

public string SafeSubstring(this string text, int index, int count)
{
    // TODO: null checking
    return text.Length > index + count ? text.Substring(index, count)
                                       : text.Substring(index);
}

Обратите внимание, что это поможет вам избежать исключений только из-за подсчета - вам все равно нужно убедиться, что index подходит.

2 голосов
/ 21 февраля 2012

Это выглядит хорошо для меня.Вы уверены, что не захватываете строку заголовка?Это распространенная ошибка при работе с сеткой.

if (dataGridView1.Rows[i].RowType == DataControlRowType.DataRow)
{
    if (dataGridView1.Rows[i].Cells[0].Value.ToString().Length > 13)
    {
        e.Graphics.DrawString(dataGridView1.Rows[i].Cells[0].Value.ToString().Substring(0,14), print6B, Brushes.Black, x-10, 130 + height);
    }
}

Подробнее о типах строк здесь

2 голосов
/ 21 февраля 2012

Сначала проверьте длину строки - если она меньше 14 символов, возвращает всю строку, в противном случае SubString (0,14).

0 голосов
/ 21 февраля 2012
string strToWrite = string.Empty;
if(dataGridView1.Rows[i].Cells[0].Value.Length > 14){
   strToWrite = dataGridView1.Rows[i].Cells[0].Value.ToString().Substring(0,14);
else 
   strToWrite = dataGridView1.Rows[i].Cells[0].Value;
e.Graphics.DrawString(strToWrite, print6B, Brushes.Black, x-10, 130 + height);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...