获取子字符串会导致错误

时间:2012-02-21 17:05:39

标签: c# winforms

我有以下一行:

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方法,我收到此错误: index和length必须引用字符串c#

中的位置

获取字符串前14个字符的最佳方法是什么?

4 个答案:

答案 0 :(得分:3)

如果 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合适。

答案 1 :(得分:2)

首先检查字符串的长度 - 如果小于14个字符则返回整个字符串,否则返回SubString(0,14)。

答案 2 :(得分:2)

对我来说很好看。你确定你没有抓住标题行吗?处理gridview时这是一个常见的错误。

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

您可以在行类型here

上查看更多内容

答案 3 :(得分:0)

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