我有一个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。
答案 0 :(得分:1)
从上面的场景中我可以推断出,当您在第二个网格视图中显示更改(显示学生信息)并成功保存时,应修改父网格视图中标签列“状态”的值到'真'。
可能的修复:
注意:如果您可以发布更多有关正在发生的事情的代码,我可以帮助您使用相同的代码。
解决方案第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作为您的链接按钮列,并且您想要处理LinkButton-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,因此没有其他选项。