检查gridview中是否修改了行

时间:2015-04-22 07:10:43

标签: c# asp.net gridview

我有一个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)
        {

        }
    }

5 个答案:

答案 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中没有这样的方法,你必须在对象中加载数据然后你必须验证。

您可以查看Updating Only Changed Rows Using GridView Control

答案 2 :(得分:0)

这里要做的基本操作是将原始数据加载到DataTable,然后在该特定列的循环中逐个比较GridView行,在您的情况下是{ {1}}列。要将TextBoxDataTable进行比较,您可以尝试以下方法:

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;
  }
}