2016-10-03 57 views
2

我有一個包含一個字符串:「行#,列#,Row'X'Col'X'=序列號,...在Visual Studio C#中使用的DataGridView

如何創建一個DataGrid具有行和列的數量表中定義,然後將串行#秒到電網

實例:

2,1,R1C1 = 111,R2C1 = 112,

2,2- ,R1C1 = 211,R1C2 = 212,R2C1 = 213,R2C2 = 214,

謝謝

+0

我不是真正理解你在這裏問什麼:_然後其餘的變量輸入到正確的單元格,而不硬編碼每個one_? – JohnG

+0

您是否要求將每個PLX按照左上角62,左下角62,右上角61和右下角63的順序排列?如果這樣使用這些數字並在算法中使用4的倍數。 – Javaturtle

+0

它在輸入字符串上看起來像一個簡單的string.split ..以獲得RXCX值。然後你就會知道電網所需的尺寸。 – JohnG

回答

1

下面是代碼,做你在問什麼;但是我必須指出這種方法存在的一些問題。首先,從前兩個元素中獲取總行數和列數以創建表格是有風險的。如果這些數據是錯誤的,那麼這段代碼很可能會崩潰或可能會遺漏數據。舉例如果輸入是:2,2,RXCX = ..,RXCX = ..,RXCX = ..,RXCX = ..,RXCX =,RXCX = ...這條線只會得到前4個值。

更糟...這會崩潰...如果輸入是2,2 RXCX = ..,RXCX = ..那麼當您嘗試訪問splitArray中的第4個元素時會崩潰,因爲沒有第4個元素。無論哪種方式都不好。

我的觀點是安全的......在創建網格之前,看看有多少數據實際存在是一種更好的方法。你可以用StringArray.Length減去前兩個元素的數量。這些元素將定義尺寸並允許您檢查其有效性。這將確保你的循環不會超出界限,因爲提供的數據是錯誤的。當您可以從數據本身獲取該信息時,似乎冗餘且容易出錯提供維度值。

我還不是100%確定你想在這裏完成什麼。它看起來像是某種形式的搜索。這就是我想象的... 看着你的(以前的)屏幕截圖,在我看來,在你輸入序列號文本框並點擊「搜索文本文件」按鈕後,它將搜索來自輸入字符串的數據即「PLX51 ...」,然後讓網格顯示與「序列號」文本框中的內容匹配(或相似)的「過濾」結果。如果這是真的,我會忽略RXCX值並將數據放在一個列中。然後,連線文本框的OnKeyPress事件,以便在用戶輸入串行#文本框時輸入網格。否則,我迷失了爲什麼你需要以所描述的方式創建數據。僅僅因爲輸入有不必要的數據......並不意味着你必須使用它。只是一個想法。

string inputString = "2,2,R1C1=211,R1C2=212,R2C1=213,R2C2=214"; 
    string[] splitArray = inputString.Split(','); 
    int totalRows = int.Parse(splitArray[0]); 
    int totalCols = int.Parse(splitArray[1]); 
    int itemIndex = 2; 

    // add the columns 
    for (int i = 0; i < totalCols; i++) 
    { 
    dataGridView1.Columns.Add("Col", "Col"); 
    } 
    // add the rows 
    dataGridView1.Rows.Add(totalRows); 


    for (int i = 0; i < totalRows; i++) 
    { 
    for (int j = 0; j < totalCols; j++) 
    { 
     dataGridView1.Rows[i].Cells[j].Value = splitArray[itemIndex]; 
     itemIndex++; 
    } 
    } 
+0

這太棒了!是否可以顛倒這些行,使row1項目位於最下面一行,最大編號的行項目位於最上面一行?同樣用這種方法,我怎樣才能把值的最後5個字符打印到單元格中? – TimmRH

+0

您希望單元格看起來像1 = 211或2 = 212? – JohnG

+0

好吧,那些是簡單的例子,數字通常是8-12位數字,但我只想顯示最後4或5位數字。我已經通過分割字符串(',','=')並將索引增加爲2來分割「RXCX =」。 – TimmRH