我不久前发布了此帖子,但没有,我必须更新问题以确保得到正确的答案。
我有一个GridView。我需要基于GridView中的值更新SQL表。 当用户单击GridView上的默认EDIT按钮时,更改所做的任何更改,然后单击UPDATE。这是我遇到问题的地方。我已经尝试了多个OnRowEditing,OnRowUpdating,OnRowUpdate作为按钮控件。
这是我使用的代码。
protected void gvReviewedPolicy_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
DateTime dateTime = DateTime.Now;
//GridViewRow editRow = gvReviewedPolicy.Rows[gvReviewedPolicy.EditIndex];
//string Emailed = editRow.Cells[7].Text;
//string UniqClient = editRow.Cells[1].Text;
//string UniqPolicy = editRow.Cells[3].Text;
string UniqClient = gvReviewedPolicy.SelectedRow.Cells[2].Text;
string UniqPolicy = gvReviewedPolicy.SelectedRow.Cells[3].Text;
//string Email = Emailed.ToString();
//string dt = dateTime.ToString();
//string Up = UniqClient.ToString();
MessageBox.Show(UniqClient);
MessageBox.Show(UniqPolicy);
//MessageBox.Show(dt);
string query = "UPDATE [Reviewed_Renewal_Policy] SET [DateUpdated] = @dateTime where ([UniqClient] = @UniqClient) AND ([UniqPolicy] = @UniqPolicy)";
using (SqlConnection conn = new SqlConnection("Data Source=GTU-BDE01;Initial Catalog=TestDB;Integrated Security=True"))
{
using (SqlCommand comm = new SqlCommand(query, conn))
{
comm.Parameters.AddWithValue("@UniqClient", UniqClient);
comm.Parameters.AddWithValue("@UniqPolicy", UniqPolicy);
//comm.Parameters.AddWithValue("@Emailed", Emailed);
comm.Parameters.AddWithValue("@dateTime", dateTime);
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
}
}
}
我有一些评论,因为我尝试了不同的事情。但是,显示
的代码GridViewRow editRow = gvReviewedPolicy.Rows[gvReviewedPolicy.EditIndex];
string Emailed = editRow.Cells[7].Text;
string UniqClient = editRow.Cells[1].Text;
string UniqPolicy = editRow.Cells[3].Text;
当按下UPDATE按钮时,应该访问这些单元格中的值。但是,使用MessageBox.Show会变回空白。
任何人都知道如何在单击“编辑”后再单击默认的“更新”按钮来捕获这些值?
答案 0 :(得分:0)
我曾经尝试通过实现DataGridView子类(使您能够访问所有内容)来使Winforms Datagrid过去可用于“直写”,但是由于出现了不可变的数据库和队列事务,因此我的访问方式DataGrid不能幸免于现代范式。如今,我倾向于支持ASP.NET MVC 5来“编辑”数据库。
无论如何,您是否考虑过连接数据源?您无需访问单元格即可。您可以使用类似
的连接进行更新私有SqlDataAdapter daGrid =新的SqlDataAdapter();
使用这种方法,您必须自己填写详细信息,完整的代码由几个类组成,太大而无法发布,
protected void dataGridView1_KeyUp(object sender, KeyEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
/// .. perform actions according to keyboard events ..
/// .. for example below one ..
}
public override void UpdateAfterEditGrid(DataSet ds, DataGridView dataGridView1, bool DoRestoreCursor)
{
if (daGrid != null)
{
if (conn.State == ConnectionState.Closed) conn.Open();
dataGridView1.EndEdit();
try
{
if (ds == null)
{
//DataGridView dgv = dataGridView1;
//Console.WriteLine("Go datasource update .. " + dgv[cColumnIndex, cRowIndex].Value);
daGrid.Update((DataTable)dataGridView1.DataSource);
}
else daGrid.Update(ds);
LoadGridRestoreCursor(dataGridView1, DoRestoreCursor);
}
catch { ErrorReporting.ErrorMessage("== cannot update this content =="); }
}
}