好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#中DATAGRIDVIEW、DATATABLE、实体、集合、JSON实例操作

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实例操作的详细内容...

  阅读:21次