C# winform 问题百解(样式、datagridview(dgv)、json、http)

C#问题百解

  1. Q:C#如何读取并调用json文件
    A:代码如下
{
  "carList": {
    "id": {
      "cloumn": "listData1", //车辆ID
      "text": "车辆ID",
      "visible": false
    },
    "plateno": {
      "cloumn": "listData2", //车辆ID
      "text": "车牌号码",
      "visible": true
    },
    "inner_plateno": {
      "cloumn": "listData3", //内部车号
      "text": "内部车号",
      "visible": true
    },
    "capacity": {
      "cloumn": "listData4", //容量
      "text": "容量",
      "visible": true
    },
    "capacity_unit": {
      "cloumn": "listData5", //容量单位
      "text": "容量单位",
      "visible": true
    },
    "partner_name": {
      "cloumn": "listData6", //运输商名称
      "text": "运输商名称",
      "visible": true
    },
    "partner_code": {
      "cloumn": "listData7", //运输商编号
      "text": "运输商编号",
      "visible": true
    },
    "station_name": {
      "cloumn": "listData8", //站点名称
      "text": "站点名称",
      "visible": true
    },
    "station_code": {
      "cloumn": "listData9", //站点编号
      "text": "站点编号",
      "visible": true
    },
    "owner_info": {
      "cloumn": "listData10", //车主及联系电话
      "text": "车主及联系电话",
      "visible": true
    }
  }

}
			string jsonfile = jsonPath;//JSON文件路径
            StreamReader jsonStream = new StreamReader(jsonfile, System.Text.Encoding.Default);
            JsonTextReader reader = new JsonTextReader(jsonStream);
            JObject job = (JObject)JToken.ReadFrom(reader);
            
            dataGridView1.AutoGenerateColumns = false;//关闭绑定数据源时自动添加列的功能
            
            foreach (JToken jt in job.SelectToken("carList")) {
                jpr = jt.ToObject<JProperty>();
                jt2 = jt.First;
                dc = new DataGridViewTextBoxColumn();
                dc.DataPropertyName = jpr.Name;//读取每一项的key值,并作为列表中列项的数据源属性名
                dc.HeaderText = jt2["text"].ToString();
                dc.Visible = (bool)jt2["visible"];
                dataGridView1.Columns.Add(dc);//为列表动态添加列
            }
  1. Q:关闭form顶部的操作栏
    A:代码及效果如下
this.ControlBox = false;

在这里插入图片描述

  1. Q:form居中显示,关闭右上角的最小、最大按钮、页面层级最顶部显示
    A:代码及效果如下
			this.StartPosition = FormStartPosition.CenterScreen;//窗口居中
			MinimizeBox=false;//关闭最小化按钮
            MaximizeBox = false;//关闭最大化按钮
		   this.TopMost = true;//最顶层

在这里插入图片描述

  1. Q:datagridview表头样式自定义修改
    A:代码及效果如下
			dataGridView1.RowHeadersVisible = false;//禁止显示包含行标题的列
            dataGridView1.ReadOnly = true;//禁止编辑单元格
            dataGridView1.AllowUserToAddRows = false;//禁止向用户显示添加行的选项
            dataGridView1.AllowUserToResizeRows = false;//禁止用户调整行的大小
            dataGridView1.EnableHeadersVisualStyles = false;//允许修改样式
            dataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("宋体", 12, FontStyle.Bold); //标题行字体加粗
            dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;//禁止修改标题行高度
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader;//列宽调整到适合列表头单元格的内容
            dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = colorTableRowDef;
            dataGridView1.MultiSelect = false;//只允许选中单行
            dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;//整行选中

在这里插入图片描述

  1. Q:多个datagridview绑定同一个数据源时,出现操作同步的情况,如何实现互不影响?
    A:多个datagridview绑定同一个数据源时,会出现同步的现象。需要对数据源为每个dgv单独命名数据源。
			JProperty jpr;
            JToken jt2;
            DataGridViewTextBoxColumn dc;
            DataGridViewTextBoxColumn dc2;
            dataGridView1.AutoGenerateColumns = false;//关闭绑定数据源时自动添加列的功能
            dataGridView2.AutoGenerateColumns = false;//关闭绑定数据源时自动添加列的功能
            //对第一个dgv动态添加列,并绑定每一列的DataPropertyName 
            foreach (JToken jt in listJson.SelectToken("carList")) {
                jpr = jt.ToObject<JProperty>();
                jt2 = jt.First;
                dc = new DataGridViewTextBoxColumn();
                dc.DataPropertyName = jpr.Name;//读取每一项的key值,并作为列表中列项的数据源属性名
                dc.HeaderText = jt2["text"].ToString();
                dc.Visible = (bool)jt2["visible"];
                dataGridView1.Columns.Add(dc);
            }
            //对第二个dgv动态添加列,并绑定每一列的DataPropertyName 
            foreach (JToken jt in listJson.SelectToken("carList"))
            {
                jpr = jt.ToObject<JProperty>();
                jt2 = jt.First;
                dc2 = new DataGridViewTextBoxColumn();
                dc2.DataPropertyName = jpr.Name;//读取每一项的key值,并作为列表中列项的数据源属性名
                dc2.HeaderText = jt2["text"].ToString();
                dc2.Visible = (bool)jt2["visible"];
                dataGridView2.Columns.Add(dc2);
            }
            JObject job;
            JObject job2;
            JinHuoController jh = new JinHuoController();
            Dictionary<string, string> dict2 = new Dictionary<string, string>();
            dict2.Add("station_code", dict["stationcode"]);
            //dict.Add("station_name", StationName);
            /*互相影响的写法 开始*/
            job = jh.carList(dict2);
            dataGridView1.DataSource = job["rows"];
            dataGridView2.DataSource = job["rows"];
            /*互相影响的写法 结束*/
            //如图1
            
            /*互不影响的写法 开始*/ //即 对每个dgv单独命名数据源
            job = jh.carList(dict2);
            job2 = jh.carList(dict2);
            //列表赋值
            dataGridView1.DataSource = job["rows"];//多个datagridview绑定同一个数据源时,会出现同步的现象。需要对数据源为每个dgv单独命名数据源
            dataGridView2.DataSource = job2["rows"];
            /*互不影响的写法 结束*/
            //如图2

在这里插入图片描述

在这里插入图片描述

  1. Q:点击窗口右上角关闭按钮,和程序中调用this.Close()的区别?窗口关闭事件的执行过程?
    A:没有区别。执行顺序:
    1. 第一步,调用FormClosing事件。可以在该事件中,弹出与用户交互的操作。
    2. 第二步,调用FormClosed事件。弹出窗口操作,在该事件中不会执行。
  2. Q:MessageBox.Show()与MessageBox.ShowDialog()的区别?
    A:
    1. MessageBox.Show()显示的页面,可以与其他页面进行来回切换显示。且不影响该行后的代码执行。
    textBox1.Text="a";
    MessageBox.Show("123");
    textBox1.Text="b"; //窗口打开后,这一行代码会执行
    
    1. MessageBox.ShowDailog()显示的页面,不能与其他页面进行来回切换,即:必须先关闭这个页面,才能操作其他页面。且后续页面不关闭,该行后的代码不会执行。
    textBox1.Text="a";
    MessageBox.Show("123");
    textBox1.Text="b"; //窗口打开后,这一行代码不会执行
    
  3. Q:C#与C、C++的关系?
    A:C#继承了C、C++的优点,基于C、C++衍生出来的。
  4. Q:C#与.NET之间的关系?
    A:.NET是开发平台,同时支持多种语音、多种形式开发,如C#,VB、C++等。
  5. Q:如何修改程序主入口?
    A:不需要修改,默认的main基本满足日常正常需求。
  6. Q:如何在一个类中引入并调用其他类?
    A:通过using,调用所需类。
  7. Q:tabcontrol控件,切换选中是,顶部tab的文字有虚线边框,如何去掉?
    在这里插入图片描述
    A:找遍网上,都是垃圾。解决办法
    1. 在当前页面中随便一个地方,添加一个groupbox控件,即可解决。我也不知道为啥,实操经验。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值