2012-02-21 58 views
2

我有以下行:獲得一個子導致的錯誤

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 { 

因爲子串的方法,我得到這個錯誤: 索引和長度必須引用位置C#

字符串中什麼是獲得字符串的前14個字符的最佳方法?

回答

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

+0

我有上面這個:for(int i = 1; i <= dataGridView1.Rows.Count; i ++) – 2012-02-21 17:13:29

+0

你確定它沒有抓住頁腳(假設有一個)? – Ben 2012-02-21 17:16:32

+0

你是對的第一!謝謝 ! – 2012-02-21 17:19:42

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是適當的。

2

首先檢查字符串的長度 - 如果小於14個字符則返回整個字符串,否則返回SubString(0,14)。

+0

我這麼做了!我還沒有發佈! – 2012-02-21 17:10:02

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