C#中DATAGRIDVIEW、DATATABLE、实体、集合、JSON实例操作
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Windows.Forms;
namespace HdhCms
{
public partial class EditJson : Form
{
private DataTable _dt = new DataTable();
private DataRow _row;
private List<JsonTest> jsonList=new List<JsonTest>();
public EditJson()
{
InitializeComponent();
InitDataTable();
}
public void InitDataTable()
{
dataGridView1.AllowUserToAddRows = false;
_dt.Columns.Add("code");
_dt.Columns.Add("name");
_dt.Columns.Add("model");
_dt.Columns.Add("width");
_dt.Columns.Add("height");
_row = _dt.NewRow();
_row["code"] = "10001";
_row["name"] = "水控柜";
_row["model"] = "GZ10001";
_row["width"] = "120";
_row["height"] = "90";
_dt.Rows.Add(_row);
_row = _dt.NewRow();
_row["code"] = "10002";
_row["name"] = "污水柜";
_row["model"] = "GZ10002";
_row["width"] = "170";
_row["height"] = "60";
_dt.Rows.Add(_row);
_row = _dt.NewRow();
_row["code"] = "10003";
_row["name"] = "换气柜";
_row["model"] = "GZ10003";
_row["width"] = "180";
_row["height"] = "50";
_dt.Rows.Add(_row);
dataGridView1.DataSource = _dt;
}
private void button3_Click(object sender, EventArgs e)
{
var a=dataGridView1.Rows
.Cast<DataGridViewRow>()
.Where(row=>!row.IsNewRow)
.Select(row=>new
{
code = row.Cells["code"].Value.ToString(),
name = row.Cells["name"].Value.ToString(),
model = row.Cells["model"].Value.ToString(),
width = row.Cells["width"].Value.ToString(),
height = row.Cells["height"].Value.ToString(),
})
.ToList();
foreach(var b in a)
{
jsonList.Add(new JsonTest { code=b.code,name=b.name,model=b.model,width=b.width,height=b.height});
}
// 转换为 JSON 字符串
var options = new JsonSerializerOptions
{
// 使用宽松的 JSON 转义规则(允许非 ASCII 字符)
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
// 可选:美化输出
WriteIndented = true
};
string json = JsonSerializer.Serialize(jsonList,options);
textBox1.Text = json;
}
private void button2_Click(object sender, EventArgs e)
{
string json = textBox1.Text;
if (!string.IsNullOrEmpty(json))
{
// 将 JSON 反序列化为实体对象
jsonList = JsonSerializer.Deserialize<List<JsonTest>>(json);
List<JsonTest> aJson = new List<JsonTest>();
aJson.Add(new JsonTest { code = "10004", name = "移动柜", model = "GZ10004", width = "90", height = "80" });
jsonList = jsonList.Concat(aJson).ToList();
foreach (var b in jsonList)
{
_row = _dt.NewRow();
_row["code"] = b.code;
_row["name"] = b.name;
_row["model"] = b.model;
_row["width"] = b.width;
_row["height"] = b.height;
_dt.Rows.Add(_row);
}
textBox1.Text = "";
}
}
private void button4_Click(object sender, EventArgs e)
{
JsonItem item = new JsonItem();
if(string.IsNullOrEmpty(tbmc.Text) || string.IsNullOrEmpty(tbsl.Text))
{
MessageBox.Show("必须输入值");return;
}
try
{
item.jsname = tbmc.Text;
}
catch
{
item.jsname = "无填柜";
}
try
{
item.jscount = Convert.ToInt32(tbsl.Text);
}
catch
{
item.jscount = 8;
}
#region 读dataGridView1中的值
var a = from DataGridViewRow row in dataGridView1.Rows
where !row.IsNewRow
select new
{
code = row.Cells["code"].Value,
name = row.Cells["name"].Value,
model = row.Cells["model"].Value,
width = row.Cells["width"].Value,
height = row.Cells["height"].Value
};
foreach(var b in a)
{
item.jslist.Add(
new JsonTest
{
code=b.code.ToString(),
name=b.name.ToString(),
model=b.model.ToString(),
width=b.width.ToString(),
height=b.height.ToString()
}
);
}
#endregion
#region 生成JSON字符串
var options = new JsonSerializerOptions
{
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
WriteIndented = true,
};
string json = JsonSerializer.Serialize(item, options);
tbsecjson.Text = json;
#endregion
}
private void button5_Click(object sender, EventArgs e)
{
string json=tbsecjson.Text;
// 解析为可修改的 JsonNode
JsonNode jsonNode = JsonNode.Parse(json);
tbmc.Text = jsonNode["jsname"].ToString();
tbsl.Text = jsonNode["jscount"].ToString();
jsonList = JsonSerializer.Deserialize<List<JsonTest>>(jsonNode["jslist"]);
//JObject a = JObject.Parse(json);
//MessageBox.Show(jsonNode["jslist"][0]["code"].ToString());
//MessageBox.Show(jsonNode["jslist"][0]["code"].ToString());
#region 解析到dataGridView1中
foreach (var b in jsonList)
{
_row = _dt.NewRow();
_row["code"]=b.code.ToString();
_row["name"]=b.name.ToString();
_row["model"]=b.model.ToString();
_row["width"]=b.width.ToString();
_row["height"]=b.height.ToString();
_dt.Rows.Add(_row);
}
#endregion
}
private void button6_Click(object sender, EventArgs e)
{
var rows = dataGridView1.SelectedCells
.Cast<DataGridViewCell>()
.Select(c => c.OwningRow)
.Where(c => !c.IsNewRow)
.ToList();
if (dataGridView1.DataSource is DataTable dataTable)
{
foreach (DataGridViewRow dr in rows)
{
if (dr.DataBoundItem is DataRowView rowView)
{
DataRow dataRow = rowView.Row;
if (dataRow.RowState == DataRowState.Added)
{
dataRow.RejectChanges();
}
else
{
dataTable.Rows.Remove(dataRow);
}
}
}
}
}
}
public class JsonItem
{
private string _jsname;
private int _jscount;
private List<JsonTest> _jslist=new List<JsonTest>();
public string jsname { get { return _jsname; } set { _jsname = value; } }
public int jscount { get { return _jscount; } set { _jscount = value; } }
public List<JsonTest> jslist { get { return _jslist; } set { _jslist = value; } }
}
[Serializable]
public class JsonTest
{
private string _code;
private string _name;
private string _model;
private string _width;
private string _height;
public string code { get { return _code; } set { _code = value; } }
public string name { get { return _name; } set { _name = value; } }
public string model { get { return _model; } set { _model = value; } }
public string width { get { return _width; } set { _width = value; } }
public string height { get { return _height; } set { _height = value; } }
}
}
查看更多关于C#中DATAGRIDVIEW、DATATABLE、实体、集合、JSON实例操作的详细内容...