請問要如何可以把新增的內容直接覆蓋在相同編號上? 謝謝
程式碼如下:
private void showUI(ArrayList uiRawData)
{
try
{
if (RowsIndex >0)
{
int rowId = this.dataGridView1.Rows.Add("");
for (int uiRawIndex = 0; uiRawIndex < uiRawData.Count; uiRawIndex++)
{
this.dataGridView1.Rows[rowId].Cells[uiRawIndex].Value = uiRawData[uiRawIndex];
}
}
else
{
for (int uiRawIndex = 0; uiRawIndex < uiRawData.Count; uiRawIndex++)
{
this.dataGridView1.Rows[RowsIndex].Cells[uiRawIndex].Value = uiRawData[uiRawIndex];
}
}
}
catch (Exception ex)
{
var st = new StackTrace(ex, true); // Get stack trace for the exception with source file information
var frame = st.GetFrame(0); // Get the top stack frame
var line = frame.GetFileLineNumber(); // Get the line number from the stack frame
this.Save_DeBugLog("line: " + line + "Trace: " + st);
MessageBox.Show(st + "line: " + line, "MError");
}
}
你這部份showUI(ArrayList uiRawData)
只是「顯示」 data 的部份
修改此部份沒有辦法解決你的問題
你要看的
應該是「產生」(ArrayList uiRawData)那部份的程式碼
貼程式碼而不是貼圖片
先給你按個
(以下補充說明, 如果資訊不夠充足, 會繼續補充.因為真的不知道該怎麼解.. 非常感謝)
會從網路端擷取資料回來後先存到strArray , 再將裏頭的資料轉換跟寫到Arraylist 裏頭去
以下這個資料是從Arduino 那邊透過網路模組送出的, 是會連續發送. 但我是提取開頭為Result: 結尾是0的資料以**;**分割的方式將數值依序放入ArrayList 不同的位置中
簡單的說每一筆資料長這樣
Result: ;6;Initial;175;248;13440;0.5298;0.6798;25.88;1;0;100%;0
下面這個是連續送資料的樣子
Result: ;6;Initial;175;248;13440;0.5298;0.6798;25.88;1;0;100%;0
Result: ;13;Initial;175;244;13440;0.5347;0.6844;25.88;1;0;100%;0
Result: ;1;Ready;189;251;14760;0.5298;0.5842;25.88;1;0;100%;0
Result: ;6;Initial;175;248;13440;0.5298;0.6798;25.88;1;0;100%;0
Result: ;13;Initial;175;244;13440;0.5347;0.6844;25.88;1;0;100%;0
Result: ;1;Ready;189;251;14640;0.5298;0.5842;25.88;1;0;100%;0
定義
public ArrayList strRawArray = new();
public Int32 RowsIndex = 0;
下面這個是從網路端擷取的程式碼
閱讀困難的話請參考Gist連結
while (true)
{
if (this.SckSs[Scki].Receive(buffer, SocketFlags.Peek) != 0)
{
IntAcceptData = this.SckSs[Scki].Receive(clientData);
string[] strArray = Encoding.ASCII.GetString(clientData, 0, IntAcceptData).Split(';');
if ((strArray[0] == "Result: " && strArray[12] == "0") && (strArray.Length == 13 || strArray.Length == 15))
{
strRawArray.Clear();
strRawArray.Add(this.connectNum); // no
strRawArray.Add(clientip.Address); // ip addr
strRawArray.Add(Convert.ToInt32(strArray[1])); // fan num
strRawArray.Add(strArray[2]); // status
strRawArray.Add(Convert.ToInt32(strArray[3])); // gain
strRawArray.Add(Convert.ToInt32(strArray[4])); // triger
strRawArray.Add(Convert.ToDouble(strArray[5])); // rpm
strRawArray.Add(Convert.ToDouble(strArray[6])); // vol
strRawArray.Add(Convert.ToDouble(strArray[7])); // curr
strRawArray.Add(Convert.ToDouble(strArray[8])); // temp
strRawArray.Add("-"); // MUI
strRawArray.Add("-"); // stdRPM
strRawArray.Add(Convert.ToInt32(strArray[9])); // pwm
strRawArray.Add(Convert.ToInt32(strArray[10])); // source
strRawArray.Add(strArray[11]); // duty , strArray[21] , end
strRawArray.Add(this.start_time);
strRawArray.Add(DateTime.Now);
if (strArray.Length > 13)
{
strRawArray.Add(Convert.ToDouble(strArray[13])); // BEMF-channel
strRawArray.Add(Convert.ToDouble(strArray[14])); // BEMF-value
}
else
{
strRawArray.Add("-");
strRawArray.Add("-");
}
strRawArray.Add("-");
strRawArray.Add("-");
showUI(strRawArray);
RowsIndex++;
}
}
else
break;
}
產生LIST的部分要去判斷LIST裡面有沒有已經重複的序號,如果有的話就取代掉
我明白了
請回答以下問題:
「當程式停止後,這些從 Arduino 收到的資料,要不要保留?」
1.如果要,改寫如下
將收到的資料寫進資料庫
datagridview 原本讀 ArrayList 改成讀資料庫
2.如果不要,改寫如下
將原本一維的 ArrayList 改為二維的 ArrayList (uiRawData)
每讀到一筆資料
2.1 不要清空 uiRawData
2.2 要「判斷是否已存在 uiRawData」,有則覆蓋,無則新增
datagridview 每次清空,顯示「整個 uiRawData」
重點只有一句話:把 datagridview 的資料來源改成「二維 ArrayList」或「資料庫」
從arduino 收到的資料在即時顯示在datagridview後不用保留
下一筆新的資料進來後 直接覆蓋到相同編號的即可.
uiRawData <- 這個會一直被刷新
請問二維ArrayList 一維是當下收到的資料, 另一維要放什麼? 之前的嗎? 謝謝
請參考這篇
1.資料部份
原本 strRawArray 就等同 uiRawData
改成
先判斷 strRawArray 在 uiRawData 裡有沒有重覆來決定是要新增或覆蓋strRawArray 只有一筆
,每次清空uiRawData 是「累積」的(eg.多筆)
,不每次清空
2.顯示部份
原本 uiRawData 只有一筆,固定「新增一列」進 gridview
改成
先清空 gridview,再顯示「多筆」的 uiRawData
謝謝~ 因為不能選下面為最佳解. 只好選在上面