C#根据dataGridView列名如何统一列宽的批处理语句

原始样例:


DataTable dt = new DataTable();//创建DataTable对象
sda.Fill(dt);//填充DataTable
DataView dv = dt.DefaultView;
dataGridView1.DataSource = dv;

//列宽1,需统一所有带金额、税额、价税的列宽为120
this.dataGridView1.Columns["不含税金额"].Width = this.dataGridView1.Columns["不含税金额本位币"].Width = 120;
this.dataGridView1.Columns["价税合计"].Width = this.dataGridView1.Columns["价税合计本位币"].Width = 120;
this.dataGridView1.Columns["应付金额"].Width = 120;
this.dataGridView1.Columns["付款申请金额"].Width = 120;

//列宽2,需统一所有列名带制表符内容的列宽为30
 

第一个把列名放到数组里,循环处理即可,第二个遍历列,名称如果满足条件就设置。
可以交给用户配置,初始列宽保存到基础表,用户的调整后保存到用户配置表,显示时读取配置来设置

foreach批处理语句

            var dgv = new DataGridView();
            foreach(DataGridViewColumn col in dgv.Columns)
            {
                if (col.Name.Contains("Something"))
                {
                    col.Width = 111;
                }
            }
            string[] SomeCols = new string[] { "A","B","C"};
            foreach(string columnName in SomeCols)
            {
                dgv.Columns[columnName].Width = 111;
            }
我想直接套用,结果出错。

[/
            var dgv = new DataGridView();
            foreach (DataGridViewColumn col in dgv.Columns)
            {
                if (col.Name.Contains("金额"))
                {
                    col.Width = 200;
                }
            }
            string[] SomeCols = new string[] { "税额", "价税", "差额" };
            foreach (string columnName in SomeCols)
            {
                dgv.Columns[columnName].Width = 200;
            }code]


<fieldset><legend class="font_bold">引用 4 楼 Hello World, 的回复:</legend><blockquote>大概这样:
[code=csharp]            var dgv = new DataGridView();
            foreach(DataGridViewColumn col in dgv.Columns)
            {
                if (col.Name.Contains("Something"))
                {
                    col.Width = 111;
                }
            }
            string[] SomeCols = new string[] { "A","B","C"};
            foreach(string columnName in SomeCols)
            {
                dgv.Columns[columnName].Width = 111;
            }
</blockquote></fieldset>

我想直接套用
[code=csharp][/            var dgv = new DataGridView();
            foreach (DataGridViewColumn col in dgv.Columns)
            {
                if (col.Name.Contains("金额"))
                {
                    col.Width = 200;
                }
            }
            string[] SomeCols = new string[] { "税额", "价税", "差额" };
            foreach (string columnName in SomeCols)
            {
                dgv.Columns[columnName].Width = 200;
            }code]
结果报错了,第一部分的第一行若去掉,再把dgv替换成DataGridView1能成功,但第二部分仍是出错。

要换成你的datagridview控件,并且控件的列要正确,不然找不到那一列就不能设置宽度了

找出问题了,列名必须要完全一样,不能模糊值匹配

string[] SomeCols = new string[] { "不含税金额","税额","价税合计本位币" };
            foreach (string columnName in SomeCols)
            {
                dataGridView1.Columns[columnName].Width = 200;
            }

我这边数据表列名称带“金额”、“税额”、“价税”关键字的比较多,想用Contains来模糊匹配一下?能否再小蜜蜂论坛发帖机指导一下?谢谢!

发布了74 篇原创文章 · 获赞 0 · 访问量 3087

猜你喜欢

转载自blog.csdn.net/netyou/article/details/104440959
今日推荐