如何在没有按钮和文本框的情况下在数据网格视图C#win表单中编辑'cell[i]'?
在winform上,我使用编辑器将数据网格视图绑定到SQL Server数据库。数据源创建了以下对象:绑定源、表适配器、表适配器管理器和绑定导航器。我的目标只是从SQLServer表[getdata]读取信息,允许一些编辑,并将信息传递到数据库表[newdata];。此外,我还向视图中添加了未绑定的列。因此,有“绑定”列和未绑定列。当我运行应用程序时,数据就在那里。但是,我无法编辑任何单元格(未绑定)。栅格视图只读属性设置为false。列只读属性设置为false 我的datagridview代码是:如何在没有按钮和文本框的情况下在数据网格视图C#win表单中编辑'cell[i]'?,c#,winforms,datagridview,C#,Winforms,Datagridview,在winform上,我使用编辑器将数据网格视图绑定到SQL Server数据库。数据源创建了以下对象:绑定源、表适配器、表适配器管理器和绑定导航器。我的目标只是从SQLServer表[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;
}
private void btncalceasure3\u单击(对象发送者,事件参数e)
{
cnn.Open();
DataTable dt=新的DataTable();
SqlDataAdapter adapt=新的SqlDataAdapter($@)
挑选
身份证件
,工贸署
名称
,报价金额
,邦德纳姆
,债券价值
,债券日期
,债券银行
,财经索引
案例
当FinancialIndex>{Convert.ToDouble(txtLcl.Text)}时,则为1
其他0
以LCL结束
案例
当FinancialIndex<{Convert.ToDouble(txtocl.Text)}时,则1
其他0
以Ucl结束
案例
当FinancialIndex>{Convert.ToDouble(txtLcl.Text)}
和FinancialIndex<{Convert.ToDouble(txtocl.Text)}然后
'داخل'
其他“不”字
以诱惑结束
,伊斯德莱特
,删除光盘
案例
当FinancialIndex>{Convert.ToDouble(txtLcl.Text)}
和FinancialIndex<{Convert.ToDouble(txtocl.Text)}然后是1
其他0
结果
案例
什么时候
FinancialIndex>{Convert.ToDouble(txtLcl.Text)}
和FinancialIndex<{Convert.ToDouble(txtocl.Text)}
然后是“پذیش”
其他的“不”
以sresult结束
案例
当金融指数<{Convert.ToDouble(txtLcl.Text)}时,则为“转换”
当金融指数>转换为双重(文本)时,则为“转换”
什么时候
FinancialIndex<{Convert.ToDouble(txtLcl.Text)}
和FinancialIndex>{Convert.ToDouble(txtocl.Text)}
然后是“十”字
否则“
以描述结束
来自投标人
其中tid={frmDomain.ID},cnn);
适应。填充(dt);
dg3.DataSource=dt;
添加(“CHBCommitte”、类型(bool)、“valresult”);
dt.Columns.Add(“结果”,typeof(字符串),“sresult”);
添加(“离散”,类型(字符串),“说明”);
cnn.Close();
DG3.列[“Id”]。可见=假;
DG3.列[“Tid”]。可见=假;
dGSepase3.Columns[“Name”].AutoSizeMode=DataGridViewAutoSizeColumnMode.DisplayedCells;
DG3.列[“名称”]。标题文本=“نامشکت”;
DG3.列[“报价金额”]。宽度=135;
DG3.第3列[“报价金额”]。标题文本;
DG3.列[“FinancialIndex”]。宽度=110;
DG季刊3.栏目[“FinancialIndex”]。标题文本;
DG3.列[“Lcl”]。宽度=120;
DG3.列[“Lcl”]。标题文本;
DG3.列[“Ucl”]。宽度=120;
DG3.列[“Ucl”]。标题文本=“بسیحدب㶋لا”;
DG3.列[“luresult”]。宽度=120;
DG3.列[“luresult”]。标题文本=“بسسیمحده”;
DG3.列[“CHBCommitte”]。宽度=120;
DG3.栏目[“CHBCommitte”]。标题文本;
DG3.列[“结果”]。宽度=120;
DG3.列[“结果”]。HeaderText=“وضعیت”;
dGSepasion3.Columns[“discreason”]。AutoSizeMode=DataGridViewAutoSizeColumnMode.Fill;
DG3.列[“离散”]。标题文本;
DG3.列[“IsDelete”]。可见=假;
DG3.列[“DeleteDisc”]。可见=假;
DG3.Columns[“BondNum”].Visible=false;
DG3.列[“BondValue”]。可见=假;
DG3.列[“BondDate”]。可见=假;
DG3.列[“债券银行”]。可见=假;
DG3.列[“valresult”]。可见=假;
DG3.列[“sresult”]。可见=假;
DG3.列[“说明”]。可见=假;
dGSepasion3.Columns[“OfferedAmount”].DefaultCellStyle.Format=(“#,0”);
dgsepasion3.Columns[“BondValue”].DefaultCellStyle.Format=(“#,0”);
dg3.ReadOnly=false;
}
将不正确的列名绑定到网格列
您正在使用重载:
dt.Columns.Add("chbCommittee", typeof(bool), "valresult");
dt.Columns.Add("result", typeof(string), "sresult");
dt.Columns.Add("discreason", typeof(string), "decription");
列名应该是“chbcommitte”
、“result”
、和“discreason”
,但您已经在网格中使用了“Expression”
:
dgSeason3.Columns["valresult"].Visible = false;
dgSeason3.Columns["sresult"].Visible = false;
dgSeason3.Columns["decription"].Visible = false;
要修复:
dgSeason3.Columns["chbCommittee"].Visible = false;
dgSeason3.Columns["result"].Visible = false;
dgSeason3.Columns["discreason"].Visible = false;
其他:
正如在注释中提到的,您的代码容易出错。您应该改为使用(或者由于@AlexanderPetrov在其评论中指出的AddWithValue
问题):
如果您有一个模型列表,然后绑定L,那么您的代码也会更干净
public class BidderModel {
public string Id { get; set; } //change `string` into whatever data type your `Id` column is
public string Tid { get; set; } //change `string` into whatever data type your `Tid` column is
// . . . . your "bound" columns
// . . . . your "unbound" columns
}
private void btnCalcSeason3_Click(object sender, EventArgs e)
{
cnn.Open();
DataTable dt = new DataTable();
SqlDataAdapter adapt = new SqlDataAdapter($@"your query", cnn);
adapt.Fill(dt);
cnn.Close();
List<BidderModel> bidders = new List<BidderModel>();
foreach(DataRow dr in dt.Rows) // dt is a DataTable
{
bidders.Add(new BidderModel() {
Id = int.Parse(dr["Id"].ToString()),
Name = dr["Name"].ToString(),
// . . . and so on and so forth
});
}
dgSeason3.DataSource = bidders;
}