我有一个项目,使用 WinForm 和 Connectivity Pack 从 WinCC 的 SQLRunTime 读取变量记录数据。读回数据时,所有实值数据都包含在 1 列中。我想根据数据的 ValueID 将这些数据分成许多不同的列。但是,当我使用命令“If ( ValueID == ) 时,数据被分为 2 列,但是从第二列开始,数据不是从第一个单元格开始填充,而是从紧接着该单元格之后的单元格开始填充包含第 1 列的数据。如何填写第二列的第一个单元格? 抱歉我的英语不是很好。 下面是描述当前情况的代码和图像 在此输入图片描述
命名空间 WinFormToSQLRunTimeWinCC { 公共部分类 UserControl1: UserControl { System.DateTime localDateTimeFrom; System.DateTime localDateTimeTo; System.DateTime univDateTimeFrom; System.DateTime univDateTimeTo; 数据表 myTableTag; 数据表 myTableTagModify; OleDbConnection myConnection; OleDbDataAdapter myDataAdapter; 字符串 mySelectQuery = "";
public UserControl1()
{
InitializeComponent();
}
private void UserControl1_Load(object sender, EventArgs e)
{
dtpFrom.Value = System.DateTime.Now.AddDays(-1);
dtpTo.Value = System.DateTime.Now;
txtStep.Text = Convert.ToString(300);
}
public int TLG_Connect ( string mySeclectQuery)
{
string myConnectionString = "Provider = WinCCOLEDBProvider.1; Data Source = ADMIN\\WINCC; Catalog = CC_92_CS11__24_05_16_16_24_12R; Jet OLEDB:Database Password= ";
myGrid.Name = "TagLogging";
myTableTag = new DataTable();
myTableTagModify = new DataTable();
System.DateTime localDateTime;
DataColumn newColumn = new DataColumn("DateTime", System.Type.GetType("System.String"));
newColumn.Caption = "Date Time";
newColumn.DefaultValue = string.Empty;
myTableTagModify.Columns.Add(newColumn);
newColumn = new DataColumn("kPa", System.Type.GetType("System.String"));
newColumn.Caption = "kPa";
newColumn.DefaultValue = string.Empty;
myTableTagModify.Columns.Add(newColumn);
newColumn = new DataColumn("Nm3/h", System.Type.GetType("System.String"));
newColumn.Caption = "Nm3/h";
newColumn.DefaultValue = string.Empty;
myTableTagModify.Columns.Add(newColumn);
using (OleDbCommand myComand = new OleDbCommand(mySeclectQuery))
{
myConnection = new OleDbConnection(myConnectionString);
myComand.Connection = myConnection;
myDataAdapter = new OleDbDataAdapter(myComand);
myTableTag.TableName = "myTableTag";
myTableTagModify.TableName = "myTableTagModify";
myDataAdapter.Fill(myTableTag);
myTableTagModify.Clear();
foreach (DataRow row in myTableTag.Rows)
{
int a = Convert.ToInt16(row["ValueID"]);
if ( a == 1)
{
DataRow newRow = myTableTagModify.NewRow();
localDateTime = System.DateTime.Parse(row["Timestamp"].ToString());
localDateTime = localDateTime.ToLocalTime();
newRow["DateTime"] = localDateTime.ToString();
newRow["kPa"] = (String.Format("{0:F3}", row["RealValue"])).PadLeft(20);
myTableTagModify.Rows.Add(newRow);
}
if ( a ==2 )
{
DataRow newRow = myTableTagModify.NewRow();
newRow["Nm3/h"] = (String.Format("{0:F3}", row["RealValue"])).PadLeft(20);
myTableTagModify.Rows.Add(newRow);
}
}
}
myGrid.DataSource = myTableTagModify;
myConnection.Close();
return (myGrid.RowCount);
}
public void GetData()
{
string timeStep = "";
int cntData = 0;
//covert dtpFrom to universal time (utc)
localDateTimeFrom = dtpFrom.Value;
localDateTimeFrom = System.DateTime.Parse(localDateTimeFrom.ToString());
univDateTimeFrom = localDateTimeFrom.ToUniversalTime();
string tfrom = dtpFrom.Value.Year.ToString() + "-"
+ string.Format("{0:MM}", univDateTimeFrom.Month.ToString()) + "-"
+ string.Format("{0:dd}", univDateTimeFrom.Day.ToString()) + " "
+ string.Format("{0:HH}", univDateTimeFrom.Hour.ToString()) + ":"
+ string.Format("{0:mm}", univDateTimeFrom.Minute.ToString()) + ":"
+ string.Format("{0:ss}", univDateTimeFrom.Second.ToString());
//covert dtpTo to universal time (utc)
localDateTimeTo = dtpTo.Value;
localDateTimeTo = System.DateTime.Parse(localDateTimeTo.ToString());
univDateTimeTo = localDateTimeTo.ToUniversalTime();
string tto = dtpTo.Value.Year.ToString() + "-"
+ string.Format("{0:MM}", univDateTimeTo.Month.ToString()) + "-"
+ string.Format("{0:dd}", univDateTimeTo.Day.ToString()) + " "
+ string.Format("{0:HH}", univDateTimeTo.Hour.ToString()) + ":"
+ string.Format("{0:mm}", univDateTimeTo.Minute.ToString()) + ":"
+ string.Format("{0:ss}", univDateTimeTo.Second.ToString());
timeStep = ",'TIMESTEP= " + txtStep.Text + ", 1 '";
mySelectQuery = "TAG:R,('Process_value_archive\\LPG_kPa_1403';'Process_value_archive\\LPG_Nm3/h_1403'),'" + tfrom + "','" + tto + "'" + timeStep;
cntData = TLG_Connect(mySelectQuery);
}
private void btn_Load_Click(object sender, EventArgs e)
{
GetData();
}
}
}
您每次都会添加一个新行 (
DataRow newRow = myTableTagModify.NewRow();
)。您需要为 ValueID
的每个值提供一个计数器数组,以添加新行或插入现有行之一。