我有一个GridView,我只使用文本框对一个列执行批量更新。但在更新之前,我需要检查整个gridview的文本框的值,如果值没有更改,我需要提供一个警告,说明“更改字段以进行更新”。
有人可以建议我一些选择吗?
protected void btnUpdate_Click(object sender, EventArgs e)
{
try
{
foreach (GridViewRow row in gvDetails.Rows)
{
string strID = ((Label)row.FindControl("lblID")).Text;
string strGroup = ((Label)row.FindControl("lblGrp")).Text;
string strValue = ((TextBox)row.FindControl("txtValue")).Text;
{
//my update query
}
}
}
catch (Exception ex)
{
}
}
答案 0 :(得分:5)
一个更简单的方法是将asp:HiddenField
添加到ItemTemplate并比较每行的值。
<asp:HiddenField ID="" runat="server" Value='<%# Eval("blah") %>'></asp:HiddenField>
现在您只需将该值与代码隐藏中每行的文本框值进行比较,就像这样。
protected void btnUpdate_Click(object sender, EventArgs e)
{
try
{
var isAnyRowUpdated = false;
foreach (GridViewRow row in gvDetails.Rows)
{
string strID = ((Label)row.FindControl("lblID")).Text;
string strGroup = ((Label)row.FindControl("lblGrp")).Text;
string strValue = ((TextBox)row.FindControl("txtValue")).Text;
string strOldValue = ((HiddenField)row.FindControl("hdnOldValue")).Value;
if (strValue != strOldValue)
{
isAnyRowUpdated = true;
//update procedure here.
}
}
//now check if the flag is still false
//that means no rows are changed
if(!isAnyRowUpdated)
{
//alert no rows are updated
}
}
catch (Exception ex)
{
}
}
我希望代码是自我解释的。
答案 1 :(得分:2)
您可以尝试使用DataGridView.RowValidating Event并检查IsCurrentRowDirty属性是否已更改
<击>
IsCurrentRowDirty属性获取一个指示当前是否的值
row有未提交的更改。
修改: - 强>
以上在Winforms中的作品;在Asp.net中没有这样的方法,你必须在对象中加载数据然后你必须验证。
答案 2 :(得分:0)
这里要做的基本操作是将原始数据加载到DataTable
,然后在该特定列的循环中逐个比较GridView
行,在您的情况下是{ {1}}列。要将TextBox
与DataTable
进行比较,您可以尝试以下方法:
GridView
希望这有帮助。
答案 3 :(得分:0)
根据对话,我提供了一些伪逻辑。您可以使用此实现自己的代码。
protected void btnUpdate_Click(object sender, EventArgs e)
{
try
{
DataTable dt = LoadData(); //Load the data from DB
EnumerableRowCollection<DataRow> enumerableDt = dt.AsEnumerable();
foreach (GridViewRow row in gvDetails.Rows)
{
string strID = ((Label)row.FindControl("lblID")).Text;
string strGroup = ((Label)row.FindControl("lblGrp")).Text;
string strValue = ((TextBox)row.FindControl("txtValue")).Text;
DataRow dr = enumerableDt.Where(x => x.Field<string>("ID") == strID).FirstOrDefault(); //Change your condition accordingly
if (dr["Value"].ToString().ToUpper() != strValue.Trim().ToUpper()) //Change your condition here
{
//Do your updated data logic here
}
else
{
//Do your not updated data logic here
}
}
}
catch (Exception ex)
{
}
}
答案 4 :(得分:0)
对照相应项目的数据键值检查它们。
<MasterTableView DataKeyNames="Response, ...
foreach (GridDataItem item in FTReport.MasterTableView.Items)
{
string ResponseValue = tbResponse.Text;
if (item.GetDataKeyValue("Response").ToString() != ResponseValue)
{
do something;
}
}