如何先填充DataTable第一列数据,后续再补充其他列数据?
解决方案:先填充DataTable第一列,后续补填其他列
首先,我得先理清你的核心需求:你的DataTable已经建好所有列头了,现在要先把从服务器拿到的数千条数据塞进第一列,每一条数据对应一行,其他列先空着,之后等有对应数据时再找到对应行补填。那咱们一步步来调整你的代码:
第一步:修正初始接收并填充第一列的逻辑
你的原代码有几个小问题需要先调整,比如没有处理实际接收的字节数(直接用buffer长度会导致残留数据干扰),还有没正确创建DataRow来填充数据。这里假设你的varNamenArray[0]就是第一列的列名,咱们来改代码:
// 先拿到第一列的列名(假设是列头数组的第一个元素) string firstColumnName = varNamenArray[0]; while (true) { // 重点:接收时获取实际收到的字节数,避免buffer残留数据 int receivedBytes = receiving_socket.Receive(receive_buffer); if (receivedBytes <= 0) continue; // 只把实际收到的字节转成字符串,不要带buffer里的空字节 string data = CreateStringFromByteArray(receive_buffer, 0, receivedBytes); string[] arrayData = data.Split('/'); foreach (string str in arrayData) { // 跳过拆分出来的空字符串(比如数据末尾的/导致的) if (string.IsNullOrWhiteSpace(str)) continue; // 创建新行,只填充第一列,其他列留空 DataRow newRow = dataTable.NewRow(); newRow[firstColumnName] = str; // 把行添加到DataTable里 dataTable.Rows.Add(newRow); } }
这里要注意:如果你的第一列是唯一标识(比如ID),那后续补填其他列会非常方便,这也是我默认的前提——毕竟要找到对应行,总得有个唯一的匹配条件对吧?
第二步:后续补填第二、第三列的方法
等之后收到对应其他列的数据时,你需要知道两个关键信息:
- 要填充的列名(比如第二列的列名)
- 这个数据对应的第一列的唯一值(比如对应哪一行的ID)
举个例子,假设你收到的第二列数据格式是"SecondColumn/ID123/ValueXYZ",拆分后拿到列名、对应第一列的ID、要填的值,那可以这样找到对应行并填充:
// 假设你已经解析出这三个值 string targetColumn = "SecondColumn"; string firstColMatchValue = "ID123"; string newValue = "ValueXYZ"; // 用Select方法找到匹配的行(这里用第一列的值作为条件) DataRow[] matchingRows = dataTable.Select($"{firstColumnName} = '{firstColMatchValue}'"); // 确保找到唯一的行(如果第一列是主键,这里应该只有一行) if (matchingRows.Length > 0) { matchingRows[0][targetColumn] = newValue; }
额外的小提示
- 如果你的第一列不是唯一值,那得想其他办法关联行(比如给每行加一个隐藏的自增ID列),不然后续可能找不到正确的行。
- 处理大量数据时,建议用
dataTable.BeginLoadData()和dataTable.EndLoadData()来提升性能,避免每次添加行都触发DataTable的事件:dataTable.BeginLoadData(); // 批量添加行的代码放在这里 dataTable.EndLoadData();
内容的提问来源于stack exchange,提问作者sniffi
相关产品推荐
相关产品推荐

