在C#中更改GridView列值

时间:2014-03-13 05:23:57

标签: c# asp.net gridview

我有一个GridView,其中有一列Status,每行中的默认值为False(在标签中)。 有一个名为Student的列,这是链接按钮。因此,当用户点击学生姓名时 将打开gridview以显示该用户的数据。我更改第二个GridView的数据,然后保存它。因此,当成功保存此数据时。我想将第一个GridView的状态从False修改为True以用于该特定行。 那么请建议我怎么做? 是否有必要再次绑定GridView。有没有简单的方法,请告诉我。

因此,主要问题是如何根据某些操作修改GridView中的特定单元格值。

我正在写一段代码,我正在尝试。 我正在保存父GridView行号。是ViewState。

protected void btnSave_Click(object sender, EventArgs e)
{
    if (ViewState["RowIndexPOS"] != null)
    {
        int iRowIndex = Convert.ToInt32(ViewState["RowIndexPOS"]);
        Label lblStatus = (Label)GridViewMultiplePOSAssociationId.Rows[iRowIndex].FindControl("LabelStatusPendingPOSId");
        //Means all rows in GridView are successfully associated
        if (table.Rows.Count == iResultCount)
        {
            lblStatus.Text = "Associated";
        }
        else
        {
            lblStatus.Text = "Pending";
        }
    }
}

绑定第一个gridview的代码

DataTable dt = new DataTable();
DataRow dr = null;
dt.Columns.Add(new DataColumn("Row Number", typeof(string)));
dt.Columns.Add(new DataColumn("POS Id", typeof(string)));
dt.Columns.Add(new DataColumn("Action", typeof(string)));
dt.Columns.Add(new DataColumn("Status", typeof(string)));
for (int index = 0; index < m_listStrPendingListOfPOS.Count; index++)
{
    dr = dt.NewRow();
    int iRowNo = index + 1;
    dr["Row Number"] = iRowNo;
    string strGridViewPOSId = m_listStrPendingListOfPOS[index];
    dr["POS Id"] = strGridViewPOSId;
    dr["Action"] = string.Empty;
    dr["Status"] = "Pending";
    dt.Rows.Add(dr);                                            
}

ViewState["POSTable"] = dt;
GridViewMultiplePOSAssociationId.DataSource = dt;
GridViewMultiplePOSAssociationId.DataBind();  

当我尝试这个时。每行中的状态列为空。将此设置为Associated。

3 个答案:

答案 0 :(得分:1)

从上面的场景中我可以推断出,当您在第二个网格视图中显示更改(显示学生信息)并成功保存时,应修改父网格视图中标签列“状态”的值到'真'。

可能的修复:

  1. 由于“状态”列不是绑定字段,因此 根据条件设置你应该设置这个值 每次加载gridview时所以你也可以这样做 在page_load函数或网格视图中加载函数作为网格视图 除非你这样做,否则不会知道这个值已被修改过 手动设置此值。
  2. 相反,您也可以将“状态”字段更改为绑定,以便您 可以检索或修改数据集中的值(在此处使用它)并且可以始终使用 没有使用gridview“状态”列中显示的更新值 手动完成。
  3. 注意:如果您可以发布更多有关正在发生的事情的代码,我可以帮助您使用相同的代码。

    解决方案第2部分:

    尝试以下方法:

    让我们假设您已在方法bindTheGriView()中放置了“Code to bind first gridview”。有了这个假设,下面的代码可以正常工作。请根据您的代码进行修改。

    btnSave_Click方法:

    protected void btnSave_Click(object sender, EventArgs e)
    {
        bool statusFlag=false;
        if (ViewState["RowIndexPOS"] != null)
        {
            int iRowIndex = Convert.ToInt32(ViewState["RowIndexPOS"]);
            Label lblStatus = (Label)GridViewMultiplePOSAssociationId.Rows[iRowIndex].FindControl("LabelStatusPendingPOSId");
            //Means all rows in GridView are successfully associated
            if (table.Rows.Count == iResultCount)
            {
                lblStatus.Text = "Associated";
            }
            else
            {
                lblStatus.Text = "Pending";
            }
        }
        //now call the binding method with the bool flag value
         bindTheGriView();
    }
    

    您的方法具有'绑定第一个gridview的代码'(此示例中的bindTheGriView(bool statusFlag))将如下所示:

    private void bindTheGriView()
            {
                DataTable dt = new DataTable();
                DataRow dr = null;
                dt.Columns.Add(new DataColumn("Row Number", typeof(string)));
                dt.Columns.Add(new DataColumn("POS Id", typeof(string)));
                dt.Columns.Add(new DataColumn("Action", typeof(string)));
                dt.Columns.Add(new DataColumn("Status", typeof(string)));
                for (int index = 0; index < m_listStrPendingListOfPOS.Count; index++)
                {
                    dr = dt.NewRow();
                    int iRowNo = index + 1;
                    dr["Row Number"] = iRowNo;
                    string strGridViewPOSId = m_listStrPendingListOfPOS[index];
                    dr["POS Id"] = strGridViewPOSId;
                    dr["Action"] = string.Empty;
                    //check for the flag. if the flag is true set status to Pending else to Associated
                    dr["Status"]=((Label)GridViewMultiplePOSAssociationId.Rows[index].FindControl("LabelStatusPendingPOSId")).Text;
                   dt.Rows.Add(dr);
                }
    
                ViewState["POSTable"] = dt;
                GridViewMultiplePOSAssociationId.DataSource = dt;
                GridViewMultiplePOSAssociationId.DataBind();
            }
    

    每次您认为Status值已被修改时,您应该调用此绑定方法,因为它是动态数据。

    还要调用Page_Load方法中的函数bindTheGriView()

答案 1 :(得分:0)

假设您正在使用BoundFields作为您的链接按钮列,并且您想要处理LinkBut​​ton-click事件(而不是GridView的RowCommand):

protected void LinkClicked(Object sender, EventArgs e)
{
    //After Populating your Second Gridview
    var closeLink = (Control) sender;
    GridViewRow row = (GridViewRow) closeLink.NamingContainer;
    dataGridView1.Rows[rowNum].Cells[colNum].Text = "True"; 
}

答案 2 :(得分:0)

当您保存第一个gridview的数据时,此时更改数据集以绑定第二个gridview,您必须在第一个gridview上保存数据时加载第二个gridview,因此没有其他选项。