如何使用网格视图 OnRowEditing 事件处理程序来允许编辑网格视图中的特定单元格?

How can I use a Grid View OnRowEditing Event Handler to allow specific cells in the grid view to be edited?

我有一个网格视图,可以显示我们的客户上传的文件中的数据。上传后,文件会通过多种验证方法推送,如果数据存在问题,网格视图中的单元格会以红色突出显示,并给出一个工具提示,简要描述问题。我最近添加了一个 "Edit Invalid Entries" 按钮,我想对其进行编程以允许客户端对每一行中的错误单元格进行更改,但我不确定如何实际将特定单元格设置为编辑模式.我是前端设计的新手(如果您想调用此前端),并且我无法在线找到任何资源来帮助我在网格视图中手动将单元格(甚至行)设置为编辑模式。下面的代码循环遍历网格视图中的每一行,如果它的任何单元格以红色突出显示(即其中一个单元格中有错误),则将其设置为可见并为此调用 OnRowEditing 事件行。

我已经研究了 GridViewEventArgs class 希望我能够对其进行一些更改,但是 none 的属性和方法似乎是对我想要实现的目标有任何用处。

for (int i = 0; i < grvUpload.Rows.Count; ++i)
{
   if (grvUpload.Rows[i].Cells[0].BackColor.Equals(Color.Red) || grvUpload.Rows[i].Cells[1].BackColor.Equals(Color.Red) || grvUpload.Rows[i].Cells[2].BackColor.Equals(Color.Red) || grvUpload.Rows[i].Cells[3].BackColor.Equals(Color.Red) || grvUpload.Rows[i].Cells[4].BackColor.Equals(Color.Red) || grvUpload.Rows[i].Cells[5].BackColor.Equals(Color.Red))
   {
      grvUpload.Rows[i].Visible = true;
      grvUpload.SetEditRow(i);
   }
   else
   {
      grvUpload.Rows[i].Visible = false;
   }
}

...

protected void grvUpload_RowEditing(object sender, GridViewEditEventArgs e)
{
   // ?
}

我希望行 grvUpload.SetEditRow(i) 将网格视图中的第 i 行设置为编辑模式,但我认为我必须在 grvUpload_RowEditing 方法中这样做。

在 aspx 中,将 asp:BoundField 更改为 asp:TemplateField, 例如:

 <asp:TemplateField HeaderText="xxx">
      <ItemTemplate>
          <asp:TextBox runat="server" Style="text-align: left" ID="id" Width="400px"  Text='<%# Bind("columnName") %>'></asp:TextBox>
       </ItemTemplate>
</asp:TemplateField>

然后当gridview绑定时,你可以在点击编辑按钮后编辑cell.If你想要编辑的单元格,像这样

<asp:TemplateField HeaderText="xxx" >
                <ItemTemplate>
                    //use label show message
                    <asp:Label id="id" runat="server" 
                        Text='<%# Bind("columnName") %>'/>                        
                </ItemTemplate>
                <EditItemTemplate>                   
                    <asp:TextBox runat="server" Style="text-align: left" ID="idT" Width="400px"  Text='<%# Bind("columnName") %>'></asp:TextBox>
                </EditItemTemplate>
            </asp:TemplateField>

在 .cs grvUpload_RowEditing 方法中,添加这个,

grvUpload.EditIndex = e.NewEditIndex; //也许你需要再次绑定gridview