【发布时间】:2021-06-01 18:19:35
【问题描述】:
在 winform 上,我使用编辑器将数据网格视图绑定到 SQL Server 数据库。数据源创建了以下对象:绑定源、表适配器、表适配器管理器和绑定导航器。我的目标只是从 SQL Server 表 [getdata] 中读取信息,允许进行一些编辑,然后将信息传递给数据库表 [newdata];。此外,我在视图中添加了未绑定的列。因此,有“绑定”列和未绑定列。当我运行应用程序时,数据就在那里。但是,我无法编辑任何单元格(未绑定)。网格视图只读属性设置为 false。该列的只读属性设置为 false。
我的 datagridview 代码是:
private void btnCalcSeason3_Click(object sender, EventArgs e)
{
cnn.Open();
DataTable dt = new DataTable();
SqlDataAdapter adapt = new SqlDataAdapter($@"
SELECT
Id
, Tid
, NAME
, OfferedAmount
, BondNum
, BondValue
, BondDate
, BondBank
, FinancialIndex
, CASE
WHEN FinancialIndex > {Convert.ToDouble(txtLcl.Text)} THEN 1
ELSE 0
END AS LCL
, CASE
WHEN FinancialIndex < {Convert.ToDouble(txtUcl.Text)} THEN 1
ELSE 0
END AS Ucl
, CASE
WHEN FinancialIndex > {Convert.ToDouble(txtLcl.Text)}
AND FinancialIndex < {Convert.ToDouble(txtUcl.Text)} THEN
'داخل'
ELSE 'خارج'
END AS luresult
, IsDelete
, DeleteDisc
, CASE
WHEN FinancialIndex > {Convert.ToDouble(txtLcl.Text)}
AND FinancialIndex < {Convert.ToDouble(txtUcl.Text)} THEN 1
ELSE 0
END AS valresult
, CASE
WHEN
FinancialIndex > {Convert.ToDouble(txtLcl.Text)}
AND FinancialIndex < {Convert.ToDouble(txtUcl.Text)}
THEN 'پذیرش'
ELSE 'حذف'
END AS sresult
, CASE
WHEN FinancialIndex < {Convert.ToDouble(txtLcl.Text)} THEN 'حذف - فصل سوم - ماده 9 - فاقد صحت مبانی قیمت و غیرقابل اجرا'
WHEN FinancialIndex > {Convert.ToDouble(txtUcl.Text)} THEN 'حذف - فصل سوم - ماده 10 - فاقد صحت مبانی قیمت و غیرقابل اجرا'
WHEN
FinancialIndex < {Convert.ToDouble(txtLcl.Text)}
AND FinancialIndex > {Convert.ToDouble(txtUcl.Text)}
THEN 'حذف - فصل سوم - ماده 9و10 - فاقد صحت مبانی قیمت و غیرقابل اجرا'
ELSE ''
END AS decription
FROM Bidder
WHERE tid = {frmDomain.ID}", cnn);
adapt.Fill(dt);
dgSeason3.DataSource = dt;
dt.Columns.Add("chbCommittee", typeof(bool), "valresult");
dt.Columns.Add("result", typeof(string), "sresult");
dt.Columns.Add("discreason", typeof(string), "decription");
cnn.Close();
dgSeason3.Columns["Id"].Visible = false;
dgSeason3.Columns["Tid"].Visible = false;
dgSeason3.Columns["Name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgSeason3.Columns["Name"].HeaderText = "نام شرکت ";
dgSeason3.Columns["OfferedAmount"].Width = 135;
dgSeason3.Columns["OfferedAmount"].HeaderText = "مبلغ پیشنهادی";
dgSeason3.Columns["FinancialIndex"].Width = 110;
dgSeason3.Columns["FinancialIndex"].HeaderText = "شاخص مالی ";
dgSeason3.Columns["Lcl"].Width = 120;
dgSeason3.Columns["Lcl"].HeaderText = "بررسی حد پایین ";
dgSeason3.Columns["Ucl"].Width = 120;
dgSeason3.Columns["Ucl"].HeaderText = "بررسی حد بالا";
dgSeason3.Columns["luresult"].Width = 120;
dgSeason3.Columns["luresult"].HeaderText = "بررسی محدوده";
dgSeason3.Columns["chbCommittee"].Width = 120;
dgSeason3.Columns["chbCommittee"].HeaderText = "نظر کمیته فنی";
dgSeason3.Columns["result"].Width = 120;
dgSeason3.Columns["result"].HeaderText = "وضعیت";
dgSeason3.Columns["discreason"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dgSeason3.Columns["discreason"].HeaderText = "توضیحات";
dgSeason3.Columns["IsDelete"].Visible = false;
dgSeason3.Columns["DeleteDisc"].Visible = false;
dgSeason3.Columns["BondNum"].Visible = false;
dgSeason3.Columns["BondValue"].Visible = false;
dgSeason3.Columns["BondDate"].Visible = false;
dgSeason3.Columns["BondBank"].Visible = false;
dgSeason3.Columns["valresult"].Visible = false;
dgSeason3.Columns["sresult"].Visible = false;
dgSeason3.Columns["decription"].Visible = false;
dgSeason3.Columns["OfferedAmount"].DefaultCellStyle.Format = ("#,0");
dgSeason3.Columns["BondValue"].DefaultCellStyle.Format = ("#,0");
dgSeason3.ReadOnly = false;
}
【问题讨论】:
-
你的代码容易被SQL注入。我建议你改用
AddWithValue。 -
谢谢@AlexanderPetrov。这是一些有趣的文章。
标签: c# winforms datagridview