如何使用C#datatable获得所需的输出
好的,我改变了整个问题。我想生成n*2行datatable,即如果主datatable包含3行,新创建的datatable将包含6行(1行表示True选项,1行表示False选项) 假设我有一个主/主表,如下所示如何使用C#datatable获得所需的输出,c#,datatable,C#,Datatable,好的,我改变了整个问题。我想生成n*2行datatable,即如果主datatable包含3行,新创建的datatable将包含6行(1行表示True选项,1行表示False选项) 假设我有一个主/主表,如下所示 question_text|right_option -------------|------------ Question 1 | True -------------|------------ Question 2 | False -------------|--
question_text|right_option
-------------|------------
Question 1 | True
-------------|------------
Question 2 | False
-------------|------------
Question 3 | True
所以问题1的正确选项为真,问题2的正确选项为假,以此类推
现在基于此表,我想创建一个如下表。
question_text|option_text * | right_option
-------------|--------------|-------------
question 1 | True | True
-------------|--------------|-------------
question 1 | False | True
-------------|--------------|-------------
question 2 | True | False
-------------|--------------|-------------
question 2 | False | False
此处选项_text为硬编码列,其值仅为True和False
表(nx2)如下所示
DataTable dtTrueFalse = Import_To_Grid(FilePath, Extension, "Yes"); // primary table where only right option exist
for (int i = 0; i < dtTrueFalse.Rows.Count * 2; i++)
{
DataRow dr;
if (i % 2 == 0)
{
dr = dtOptions.NewRow();
dr["Option_Text"] = "True";
}
else
{
dr = dtOptions.NewRow();
dr["Option_Text"] = "False";
}
dtOptions.Rows.Add(dr);
}
现在,我想知道如何在右选项列中插入值?请帮助我。您没有发布数据表的创建 我假设还没有任何列“right_option”,所以首先需要使用
dtTrueFalse.Columns.Add("right_option");
之后,您可以像使用“option_text”一样访问每行中的此列:
dr["right_option"] = "False";
编辑
根据您的评论,以下代码是您真正需要的吗
// build source datatable
DataTable dtTrueFalse = new DataTable();
dtTrueFalse.Columns.AddRange(new[] { new DataColumn("question_text"), new DataColumn("Right_Option") });
// add dummy data
var dummyRow = dtTrueFalse.NewRow();
dummyRow["question_text"] = "qst 1";
dummyRow["Right_Option"] = "False";
dtTrueFalse.Rows.Add(dummyRow);
// build final datattable
DataTable dtOptions = new DataTable();
dtOptions.Columns.AddRange(new[] {new DataColumn("question_text"), new DataColumn("Right_Option"), new DataColumn("Option_Text")});
// add rows....
foreach (DataRow row in dtTrueFalse.Rows)
{
var newRowTrue = dtOptions.NewRow();
newRowTrue["question_text"] = row["question_text"];
newRowTrue["Right_Option"] = row["Right_Option"];
newRowTrue["Option_Text"] = "True";
dtOptions.Rows.Add(newRowTrue);
var newRowFalse = dtOptions.NewRow();
newRowFalse["question_text"] = row["question_text"];
newRowFalse["Right_Option"] = row["Right_Option"];
newRowFalse["Option_Text"] = "False";
dtOptions.Rows.Add(newRowFalse);
}
DataTable dtOptions=新建DataTable();AddRange(new[]{newdatacolumn(“Right_Option”)、newdatacolumn(“Option_Text”)});我没有发布,因为我已经创建了nx2表。我之所以这么做是因为我可以使用tvp轻松地将整个表传递给db。而使用dr[“right_option”]则无法访问列?是否签入调试datatable是否已获取列?并不是说您混淆了我可以访问的DataTables,而是我希望algo说,新创建的表的0,1行映射到主表的第0行,新创建的表的2,3行映射到主表的第1行,依此类推。。
// build source datatable
DataTable dtTrueFalse = new DataTable();
dtTrueFalse.Columns.AddRange(new[] { new DataColumn("question_text"), new DataColumn("Right_Option") });
// add dummy data
var dummyRow = dtTrueFalse.NewRow();
dummyRow["question_text"] = "qst 1";
dummyRow["Right_Option"] = "False";
dtTrueFalse.Rows.Add(dummyRow);
// build final datattable
DataTable dtOptions = new DataTable();
dtOptions.Columns.AddRange(new[] {new DataColumn("question_text"), new DataColumn("Right_Option"), new DataColumn("Option_Text")});
// add rows....
foreach (DataRow row in dtTrueFalse.Rows)
{
var newRowTrue = dtOptions.NewRow();
newRowTrue["question_text"] = row["question_text"];
newRowTrue["Right_Option"] = row["Right_Option"];
newRowTrue["Option_Text"] = "True";
dtOptions.Rows.Add(newRowTrue);
var newRowFalse = dtOptions.NewRow();
newRowFalse["question_text"] = row["question_text"];
newRowFalse["Right_Option"] = row["Right_Option"];
newRowFalse["Option_Text"] = "False";
dtOptions.Rows.Add(newRowFalse);
}