ASP.NET中怎样对DataTable中某一行和某一列进行操作?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET中怎样对DataTable中某一行和某一列进行操作?相关的知识,希望对你有一定的参考价值。
我指的是增删改一个数据源,就是一个类似购物车这样的内存DATATABLE.对内存数据进行增删改,因为我只对数据库增删改过,能把代码写多点吗?感谢
参考技术A .rows[index].cell[index] 自己动手,丰衣足食!在 ASP.NET 中将 DataTable 导出到 .CSV 文件时,对 DataTable 的更改不会持续存在 [重复]
【中文标题】在 ASP.NET 中将 DataTable 导出到 .CSV 文件时,对 DataTable 的更改不会持续存在 [重复]【英文标题】:Changes to DataTable not persisting when exporting DataTable to .CSV file in ASP.NET [duplicate] 【发布时间】:2015-05-21 01:26:18 【问题描述】:以下代码仅发送 .csv 文件中我的 DataTable
的最后一行。我看不到我错的地方,我是新手,请帮助我。
DataTable dt22 = new DataTable();
dt22.Columns.Add("Tasks");
DataRow dr = dt22.NewRow();
dr[0] = TextBox2.Text;
dt22.Rows.Add(dr);
GridView1.DataSource = dt22;
GridView1.DataBind();
Session["Data"] = dt22;
StringBuilder sb = new StringBuilder();
IEnumerable<string> columnNames = dt22.Columns.Cast<DataColumn>().
Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dt22.Rows)
IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
sb.AppendLine(string.Join(",", fields));
File.WriteAllText(@"c:\Tasks.csv", sb.ToString());
【问题讨论】:
查看此链接***.com/questions/4959722/c-sharp-datatable-to-csv 【参考方案1】:更新:
很难准确理解这个问题,但我认为这是回发之间的数据持久性。当用户向网格中添加一行时,您是否更新了基础数据源,然后您继续创建 CSV?
您似乎正在尝试使用 Session 来持久化数据,您是否尝试过这样的事情:
protected void Page_Load(object sender, EventArgs e)
if (!Page.IsPostBack)
InitialDataLoad();
private void InitialDataLoad()
var dt = new DataTable();
dt.Columns.Add("Tasks");
dt.Columns.Add("AnotherColumn");
var dr = dt.NewRow();
dr[0] = "task1";
dr[1] = "c1";
dt.Rows.Add(dr);
GridView1.DataSource = dt;
GridView1.DataBind();
Session["dt"] = dt;
protected void Button1_Click(object sender, EventArgs e)
// adds a row
var dt = Session["dt"] as DataTable;
if (dt != null)
var dr = dt.NewRow();
dr[0] = "anothertask";
dr[1] = "c2";
dt.Rows.Add(dr);
GridView1.DataSource = dt;
GridView1.DataBind();
Session["dt"] = dt;
protected void Button2_Click(object sender, EventArgs e)
// create csv
var dt = Session["dt"] as DataTable;
var sb = new StringBuilder();
IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().
Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dt.Rows)
IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
sb.AppendLine(string.Join(",", fields));
File.WriteAllText(@"c:\Tasks.csv", sb.ToString());
旧答案:
您的代码的最后一个循环能够打印的不仅仅是最后一行,所以我认为那里没有问题。问题可能与您期望在dt22
中的内容有关。看起来您只是在代码顶部的dt22
DataTable 中添加了一行数据,那么您期望多少行?
这是一个使用相同代码包含更多数据的示例:
DataTable dt22 = new DataTable();
dt22.Columns.Add("Tasks");
dt22.Columns.Add("AnotherColumn");
DataRow dr = dt22.NewRow();
dr[0] = "task1";
dr[1] = "c1";
dt22.Rows.Add(dr);
DataRow dr2 = dt22.NewRow();
dr2[0] = "test2";
dr2[1] = "c2";
dt22.Rows.Add(dr2);
StringBuilder sb = new StringBuilder();
IEnumerable<string> columnNames = dt22.Columns.Cast<DataColumn>().
Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dt22.Rows)
IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
sb.AppendLine(string.Join(",", fields));
File.WriteAllText(@"c:\Tasks.csv", sb.ToString());
打印:
Tasks,AnotherColumn
task1,c1
test2,c2
【讨论】:
我不知道我的gridview中有多少行,所以我需要打印gridview中动态添加的所有行 在我原来的答案之后,我已经为你更新了答案。希望对您有所帮助。 你能试着写下整个事件吗,我自己解决不了 我在网络表单中工作,没关系,尝试过但不工作 我添加了一个可能的网络表单解决方案,试试看。以上是关于ASP.NET中怎样对DataTable中某一行和某一列进行操作?的主要内容,如果未能解决你的问题,请参考以下文章
在 DataTable Delete 操作中多次发送 Ajax 请求 - ASP.NET、JQuery、Ajax