C# winform编程 Q&A

1. Q:c# winform DataGridView编辑固定查询了列名,但是数据显示到了另外的列里解决办法?

   A:在DataGridView上右击选择编辑列,在数据,DataPropertyName里对应上数据库里的字段名,即可

2. Q:如何禁用datagridview的行自动增加功能?
   A:DataGridView的AllowUserToAddRows:False.

3. Q:DataGridview中CheckBox如何赋值?
   A:this.dataGridView1.Rows[rowIndex].Cells[colName].Value = 1;
4. Q:数据库操作时,出现“至少有一个参数没有指定值”异常?
   A:if (model.Name.Trim() != "")
            {
                strSql1.Append("name,");
                strSql2.Append("" + model.Name + ",");
            }
      当添加的字段为字符串时,少了字符串引号,修改为
if (model.Name.Trim() != "")
            {
                strSql1.Append("name,");
                strSql2.Append("'" + model.Name + "',");
            }
5. Q: 删除的datagridview的当前选中行,同时更改数据库,下面的代码有什么问题?
try
                    {
                        this.dataGridView1.Rows.Remove(dataGridView1.CurrentRow);
                        int id = Int32.Parse(dataGridView1.CurrentRow.Cells["lxbh"].Value.ToString().Trim());
                        Controller.XJ_LINE.Delete(id);
                        Controller.XJ_LINE.DeleteList(id);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
A:在datagridview里面删除的是当前行,但数据库里它删除的永远是下一行。正确形式:
try
                    {
 int id = Int32.Parse(dataGridView1.CurrentRow.Cells["lxbh"].Value.ToString().Trim());
                        this.dataGridView1.Rows.Remove(dataGridView1.CurrentRow);
                        Controller.XJ_LINE.Delete(id);
                        Controller.XJ_LINE.DeleteList(id);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
6.Q:for (int i = 0; i < dataGridView1.Rows.Count; ++i )
            {
                string tmp = dataGridView1.Rows[i].Cells["yhbh"].Value.ToString();

                dataGridView1.Rows[i].Cells["xj"].Value = 0;
                for (int j = 0; j < lst.Count;++j )
                {
                    string tmpb = lst[j].ToString();
                    if(tmp.Equals(tmpb))
                    {
                        dataGridView1.Rows[i].Cells["xj"].Value = 1;
                    }
                }
            }
A:字符串Trim()方法的作用,从数据库里读出的数据有时会加上莫名的空格符号,所以Trim()掉。
for (int i = 0; i < dataGridView1.Rows.Count; ++i )
            {
                string tmp = dataGridView1.Rows[i].Cells["yhbh"].Value.ToString();

                dataGridView1.Rows[i].Cells["xj"].Value = 0;
                for (int j = 0; j < lst.Count;++j )
                {
                    string tmpb = lst[j].ToString();
                    if(tmp.Equals(tmpb))
                    {
                        dataGridView1.Rows[i].Cells["xj"].Value = 1;
                    }
                }
            }
7. Q:如何改变datagridview的当前行,三角箭头移动?
   A:有个CurrentRow属性,可是只读,郁闷,何必呢!还有个CurrentCell属性可用,如下:
 dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.CurrentRow.Index - 1].Cells[0];
     问题得以解决。
8.Q:select语句中出现保留字或缺少参数?
 strSql.Append("select xt.id as id,,se.xm as xm,xl.name as name,begindate,begintime ");
            strSql.Append(" FROM XJ_TASK xt,XJ_LINE xl,SYS_EMPLOYEE se where xt.lineid=xl.id and xt.gzbhid=se.id ");
A:语句中多了一个逗号
strSql.Append("select xt.id as id,se.xm as xm,xl.name as name,begindate,begintime ");
            strSql.Append(" FROM XJ_TASK xt,XJ_LINE xl,SYS_EMPLOYEE se where xt.lineid=xl.id and xt.gzbhid=se.id ");

9.Q:无法绑定到新的显示成员。参数名: newDisplayMember?代码如下:
 DataSet empDataSet = Controller.XJ_USER.GetAllUser();
            cboXjry.DataSource = empDataSet;
            cboXjry.DisplayMember = "xm";
            cboXjry.ValueMember = "id";
  A:设置数据源时候应该具体到表,如下:
DataSet empDataSet = Controller.XJ_USER.GetAllUser();
            cboXjry.DataSource = empDataSet.Tables[0];
            cboXjry.DisplayMember = "xm";
            cboXjry.ValueMember = "id";
10.Q:在panel里显示多张图片?
   A: ListView和ImageList的配合使用,添加的顺序不能乱,否则图片不显示,如下:
    listView1.View = System.Windows.Forms.View.LargeIcon;
            listView1.LargeImageList = imageList1;
            imageList1.ImageSize = new Size(24, 24);

            imageList1.Images.Add(Image.FromFile("D://door.jpg"));
            imageList1.Images.Add(Image.FromFile("D://door1.jpg"));
            imageList1.Images.Add(Image.FromFile("D://door3.jpg"));
            imageList1.Images.Add(Image.FromFile("D://bg.jpg"));

            listView1.Items.Add("hi",0);
            listView1.Items.Add("hi", 1);
            listView1.Items.Add("hi", 2);
            listView1.Items.Add("hi", 3);
11. Q:map.MapDoorId,map.MapDoorPos字符串的删除怎么没有用啊?
  //删除最后一个逗号
            map.MapDoorId.Remove(map.MapDoorId.Length - 1, 1);
            map.MapDoorPos.Remove(map.MapDoorPos.Length - 1, 1);
 A:字符串是不变类,这点很重要。这样删除不影响原字符串,只是返回删除后的结果,正确的使用如下:
 //删除最后一个逗号
            map.MapDoorId = map.MapDoorId.Remove(map.MapDoorId.Length - 1, 1);
            map.MapDoorPos = map.MapDoorPos.Remove(map.MapDoorPos.Length - 1, 1);


12.Q:急求助:SVN库被锁且无法解除,Error: 不能校验路径“/XXX/XXX.doc”上的锁;没有匹配的可用锁标识 ?

A:试试以下步骤:
1、备份本地修改的文件
2、update那个目录
3、选中文件get lock,在窗口中选中steal lock
4、修改文件提交
其实只要步骤3就能搞定了,但为了保险,还是按以上步骤做一下吧。
13. Q:我的数据库结构是这样子的 年 月 日 (都为文本型) 2005 01 05 要是我想这样比较大于2005-01-05的日期的语句应该怎么写好 ?
    A:日期比较用 # 符号括住日期 不要用 ' ,如" stime <=#" + ed + "# and stime >=#" + bd + "#"
14.Q:向panel里添加多个控件,为什么只显示一个呢?
 for (int i = 0; i < dt.Rows.Count; ++i)
            {
               
                    Button btn = new Button();
                    btn.Text = dt.Rows[i]["MapName"].ToString();
                    btn.FlatStyle = FlatStyle.Flat;

                    panel2.Controls.Add(btn);
                }
            }
   A:添加的控件重叠了,必须设置它们的位置,如下所示
 for (int i = 0; i < dt.Rows.Count; ++i)
            {
                if (panel2.Controls.Count > 0)
                {
                    Button btn = new Button();
                    btn.Text = dt.Rows[i]["MapName"].ToString();
                    btn.FlatStyle = FlatStyle.Flat;

                    btn.Location = new Point(panel2.Controls[panel2.Controls.Count - 1].Location.X + 100, panel2.Controls[panel2.Controls.Count - 1].Location.Y);
                    panel2.Controls.Add(btn);
                }
                else
                {
                    Button btn = new Button();
                    btn.Text = dt.Rows[i]["MapName"].ToString();
                    btn.FlatStyle = FlatStyle.Flat;
                    panel2.Controls.Add(btn);
                }
            }
15. Q:c# dataGridView添加行号和隔行换色代码???????????
    A:
在dataGridView 的RowPostPaint 事件是加入如下代码:

// 这是加入行号的代码

using (SolidBrush b = new SolidBrush(dataGridView1.RowHeadersDefaultCellStyle.ForeColor))
            {
                e.Graphics.DrawString((Convert.ToInt32(e.RowIndex) + 1).ToString(System.Globalization.CultureInfo.CurrentCulture), e.InheritedRowStyle.Font, b, e.RowBounds.Location.X + 20, e.RowBounds.Location.Y + 4);
            }

//这是了隔行换色的代码
            this.dataGridView1.RowsDefaultCellStyle.BackColor = Color.FromArgb(4, 230, 228);
            this.dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(187, 227, 227);
            this.dataGridView1.GridColor = Color.FromArgb(208, 255, 255);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值