- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我尝试更新 GridView
中的记录时,以下代码不会更新记录,但也不会引发任何错误。
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string index = GridView1.Rows[e.RowIndex].Cells[1].Text; //DwgRegID
SqlConnection con = new SqlConnection("Data Source=MEHDI-PC\\SQLEXPRESS;Initial Catalog=PIMS;Integrated Security=True");
using (SqlCommand cmd = new SqlCommand())
{
string sql = "UPDATE dbo.Dwg_Register SET Ref = @Ref, Dwg_Ref = @Dwg_Ref,Title = @Title, Dwg_Received_Date = @Dwg_Received_Date, Rev = @Rev, Trade = @Trade, type1=@type1,Produced_Date=@Produced_Date,Produced_By=@Produced_By,Submittal_Ref=@Submittal_Ref,Issued_To=@Issued_To,Date_Issued = Date_Issued, Purpose = @Purpose, status1=@status1,Action_Date=@Action_Date where DwgRegID=N'" + index + "'";
cmd.Connection = con;
con.Open();
cmd.CommandText = sql;
cmd.Parameters.Add(new SqlParameter("@Ref", txtRef.Text));
cmd.Parameters.Add(new SqlParameter("@Dwg_Ref", txtDwgRef.Text));
cmd.Parameters.Add(new SqlParameter("@Title", txtTitle.Text));
cmd.Parameters.Add(new SqlParameter("@Dwg_Received_Date", txtDwgReceivedDate.Text == "" ? DBNull.Value : (object)txtDwgReceivedDate.Text));
cmd.Parameters.Add(new SqlParameter("@Rev", txtRev.Text));
cmd.Parameters.Add(new SqlParameter("@Trade", ddlTrade.Text));
cmd.Parameters.Add(new SqlParameter("@type1", ddlType.Text));
cmd.Parameters.Add(new SqlParameter("@Produced_Date", txtProducedDate.Text == "" ? DBNull.Value : (object)txtProducedDate.Text));
cmd.Parameters.Add(new SqlParameter("@Produced_By", ddlProducedBy.Text));
cmd.Parameters.Add(new SqlParameter("@Submittal_Ref", txtSubmittalRef.Text));
cmd.Parameters.Add(new SqlParameter("@Issued_To", ddlIssuedTo.Text));
cmd.Parameters.Add(new SqlParameter("@Date_Issued", txtDateIssued.Text == "" ? DBNull.Value : (object)txtDateIssued.Text));
cmd.Parameters.Add(new SqlParameter("@Purpose", ddlPurpose.Text));
cmd.Parameters.Add(new SqlParameter("@status1", ddlStatus.Text));
cmd.Parameters.Add(new SqlParameter("@Action_Date", txtActionDate.Text == "" ? DBNull.Value : (object)txtActionDate.Text));
//cmd.Parameters.Add(new SqlParameter("@DwgRegID", index));
cmd.ExecuteNonQuery();
if (con.State == ConnectionState.Open)
{
con.Close();
}
GridView1.DataBind();
}
SqlConnection con1 = new SqlConnection("Data Source= MEHDI-PC\\SQLExpress; Initial Catalog=PIMS; Integrated Security=True");
string sql1 = "SELECT DwgRegID,Ref,Dwg_Ref,Title,Dwg_Received_Date,Rev,Trade,type1,Produced_Date,Produced_By,Submittal_Ref,Issued_To,Date_Issued,Purpose,status1,Action_Date from dbo.Dwg_Register";
con1.Open();
SqlDataAdapter da = new SqlDataAdapter(sql1,con1);
DataSet ds1 = new DataSet();
da.Fill(ds1);
GridView1.DataSource = ds1;
GridView1.DataBind();
if (con1.State == ConnectionState.Open)
{
con1.Close();
}
GridView1.EditIndex = -1;
GridView1.DataBind();
MultiView1.SetActiveView(ViewGrid);
lblUpdate.Text = "Record updated sucessfully.";
}
当我在 SSMS 中运行以下 SQL 查询时:
UPDATE dbo.Dwg_Register
SET Ref=4
from dbo.Dwg_Register
where DwgRegID=23
此命令确实将值 4 存储到 dbo.Dwg_Register 中。但是这个命令没有将值从 GridView 存储到 sql 表中。
我的EditRow函数代码如下:
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
MultiView1.SetActiveView(ViewGrid);
GridView1.EditIndex = e.NewEditIndex;
GridView1.DataBind();
此RowEditing
函数将GridView
中的RowState
更改为编辑模式。但是,当我在 Gridview
中编辑单元格值并按下更新按钮将新值存储到 Sql 表时,更新函数不会执行此操作。此代码既不会引发任何错误。请帮助我确定我可能出错的地方。 谢谢。
最佳答案
在插入数据之前进行错误检查。
该错误告诉您 txtRef.Text
没有值,但需要一个值。
完成对 Ref
值的错误检查后,您还应该继续检查所有其他值。
您不想在您的数据库中造成困惑。
更新:
确保您的 GridView
只更新正确的行类型。
我不太喜欢使用 AddWithValue
工具,因为它似乎会阻止人们理解他们的数据库。您的 Add(new SqlParameter(
技术基本上就是这样做的。
例如,这两行产生相同的结果:
cmd.Parameters.AddWithValue("@Ref", txtRef.Text);
cmd.Parameters.Add(new SqlParameter("@Ref", txtRef.Text));
数据库中的@Ref
是什么? 整数
? 可变字符(50)
?显然,数据库如何处理这两者会有很大的不同。
如果它是一个整数
,它真的应该写成:
cmd.Parameters.Add("@Ref", SqlDbType.Int).Value = Convert.ToInt32(txtRef.Text.Trim());
如果它是一个varchar(50)
,它真的应该写成:
cmd.Parameters.Add("@Ref", SqlDbType.VarChar, 50).Value = txtRef.Text.Trim();
由于我对您的数据库一无所知,所以我只能使用 AddWithValue
,但我强烈建议您查看您的数据库表的设计,然后匹配您的 SqlParameters
它们是如何设计的。
我还建议使用 const
SQL 连接字符串,因为您的数据库在您的程序使用它时不会发生变化:
private static string m_sqlConn = "Data Source=MEHDI-PC\\SQLEXPRESS;Initial Catalog=PIMS;Integrated Security=True";
我还创建了一个static
DbSafe 方法来在插入数据之前“发送”数据。专门用于此的方法使您可以轻松引导所有数据以确保其安全。此外,稍后修改该方法以添加更多功能也很容易,并且会立即转化为您在其中使用它的所有代码。
private static object DbSafe(object value) {
if ((value != null) || (value != DBNull.Value)) {
string strVal = value.ToString();
if (!String.IsNullOrEmpty(strVal)) {
return strVal.Trim();
}
}
return DBNull.Value;
}
您也没有理由创建两 (2) 个单独的 SQL 对象(SqlCommand
和 SqlDataAdapter
)来执行您的任务。
这是我编写修改后版本的方式:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) {
if (GridView1.Rows[e.RowIndex].RowType == DataControlRowType.DataRow) {
string index = GridView1.Rows[e.RowIndex].Cells[1].Text; //DwgRegID
string sqlUpdate = "UPDATE dbo.Dwg_Register SET " +
"Ref=@Ref, Dwg_Ref=@Dwg_Ref, Title=@Title, Dwg_Received_Date=@Dwg_Received_Date, " +
"Rev=@Rev, Trade=@Trade, type1=@type1, Produced_Date=@Produced_Date, " +
"Produced_By=@Produced_By, Submittal_Ref=@Submittal_Ref, Issued_To=@Issued_To, " +
"Date_Issued=Date_Issued, Purpose=@Purpose, status1=@status1, Action_Date=@Action_Date " +
"WHERE DwgRegID=N'" + index + "'";
string sqlSelect = "SELECT DwgRegID, Ref, Dwg_Ref, Title, Dwg_Received_Date, Rev, Trade, type1, Produced_Date, Produced_By, Submittal_Ref, " +
"Issued_To, Date_Issued, Purpose, status1, Action_Date " +
"from dbo.Dwg_Register";
var table = new DataTable();
using (var cmd = new SqlCommand(sqlUpdate, new SqlConnection(m_sqlConn))) {
cmd.Parameters.AddWithValue("@Ref", DbSafe(txtRef.Text));
cmd.Parameters.AddWithValue("@Dwg_Ref", DbSafe(txtDwgRef.Text));
cmd.Parameters.AddWithValue("@Title", DbSafe(txtTitle.Text));
cmd.Parameters.AddWithValue("@Dwg_Received_Date", DbSafe(txtDwgReceivedDate.Text));
cmd.Parameters.AddWithValue("@Rev", DbSafe(txtRev.Text));
cmd.Parameters.AddWithValue("@Trade", DbSafe(ddlTrade.Text));
cmd.Parameters.AddWithValue("@type1", DbSafe(ddlType.Text));
cmd.Parameters.AddWithValue("@Produced_Date", DbSafe(txtProducedDate.Text));
cmd.Parameters.AddWithValue("@Produced_By", DbSafe(ddlProducedBy.Text));
cmd.Parameters.AddWithValue("@Submittal_Ref", DbSafe(txtSubmittalRef.Text));
cmd.Parameters.AddWithValue("@Issued_To", DbSafe(ddlIssuedTo.Text));
cmd.Parameters.AddWithValue("@Date_Issued", DbSafe(txtDateIssued.Text));
cmd.Parameters.AddWithValue("@Purpose", DbSafe(ddlPurpose.Text));
cmd.Parameters.AddWithValue("@status1", DbSafe(ddlStatus.Text));
cmd.Parameters.AddWithValue("@Action_Date", DbSafe(txtActionDate.Text));
//cmd.Parameters.Add(new SqlParameter("@DwgRegID", index));
try {
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.CommandText = sqlSelect;
cmd.Parameters.Clear();
table.Load(cmd.ExecuteReader());
} catch (SqlException err) {
Response.Write(err.Message);
} finally {
cmd.Connection.Close();
}
}
GridView1.DataSource = table;
GridView1.DataBind();
MultiView1.SetActiveView(ViewGrid);
lblUpdate.Text = "Record updated sucessfully.";
}
}
此外,你会注意到我在上面添加了一个 try/catch/finally
block ,它只捕获 SqlException
错误,然后立即关闭数据库连接。
我不确定您的 GridViewEditEventArgs
正在做什么和/或它是否会造成任何伤害,所以我没有管它。
希望对您有所帮助。解释的时间太长了。
关于c# - 如何更新 Gridview 中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17600116/
我有一个网站。 必须登录才能看到里面的内容。 但是,我使用此代码登录。 doc = Jsoup.connect("http://46.137.207.181/Account/Login.aspx")
我正在尝试为我的域创建一个 SPF 记录并使我的邮件服务器能够对其进行评估。我在邮件服务器上使用 Postfix 并使用 policyd-spf (Python) 来评估记录。目前,我通过我的私有(p
我需要为负载平衡的 AWS 站点 mywebsite.com 添加 CName 记录。记录应该是: @ CNAME mywebsite.us-east-1.elb.amazon
我目前正在开发一个相当大的多层应用程序,该应用程序将部署在海外。虽然我希望它在解聚后不会折叠或爆炸,但我不能 100% 确定这一点。因此,如果我知道我可以请求日志文件,以准确找出问题所在以及原因,那就
我使用以下命令从我的网络摄像头录制音频和视频 gst-launch-0.10 v4l2src ! video/x-raw-yuv,width=640,height=480,framerate=30/1
我刚刚开始使用 ffmpeg 将视频分割成图像。我想知道是否可以将控制台输出信息保存到日志文件中。我试过“-v 10”参数,也试过“-loglevel”参数。我在另一个 SO 帖子上看到使用 ffmp
我想针对两个日期查询我的表并检索其中的记录。 我这样声明我的变量; DECLARE @StartDate datetime; DECLARE @EndDate datetime; 并像这样设置我的变量
在 javascript 中,我可以使用简单的 for 循环访问对象的每个属性,如下所示 var myObj = {x:1, y:2}; var i, sum=0; for(i in myObj) s
最近加入了一个需要处理大量代码的项目,我想开始记录和可视化调用图的一些流程,让我更好地理解一切是如何组合在一起的。这是我希望在我的理想工具中看到的: 每个节点都是一个函数/方法 如果一个函数可以调用另
如何使用反射在F#中创建记录类型?谢谢 最佳答案 您可以使用 FSharpValue.MakeRecord [MSDN]创建一个记录实例,但是我认为F#中没有任何定义记录类型的东西。但是,记录会编译为
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
我是 Sequelize 的新手并且遇到了一些语法问题。我制作了以下模型: // User sequelize.define('user', { name: { type: DataTyp
${student.name} Notify 这是我的output.jsp。请注意,我已经放置了一个链接“Notify”以将其转发到 display.jsp 上。但我不确定如何将 Stud
例如,这是我要做的查询: server:"xxx.xxx.com" AND request_url:"/xxx/xxx/xxx" AND http_X_Forwarded_Proto:(https O
我一直在开发大量 Java、PHP 和 Python。所有这些都提供了很棒的日志记录包(分别是 Log4J、Log 或logging)。这在调试应用程序时有很大帮助。特别是当应用程序 headless
在我的Grails应用程序中,我异步运行一些批处理过程,并希望该过程记录各种状态消息,以便管理员以后可以检查它们。 我考虑过将log4j JDBC附加程序用作最简单的解决方案,但是据我所知,它不使用D
我想将进入 MQ 队列的消息记录到数据库/文件或其他日志队列,并且我无法修改现有代码。是否有任何方法可以实现某种类似于 HTTP 嗅探器的消息记录实用程序?或者也许 MQ 有一些内置的功能来记录消息?
如果我有一条包含通用字段的记录,在更改通用字段时是否有任何方法可以模仿方便的 with 语法? 即如果我有 type User = // 'photo can be Bitmap or Url {
假设我有一个名为 Car 的自定义对象。其中的所有字段都是私有(private)的。 public class Car { private String mName; private
当记录具有特定字段时,我需要返回 true 的函数,反之亦然。示例: -record(robot, {name, type=industrial, ho
我是一名优秀的程序员,十分优秀!