C# 使用DataGrid ItemDataBound事件检查值

C# 使用DataGrid ItemDataBound事件检查值,c#,asp.net,C#,Asp.net,我有一个DataGrid,其中数据源与SqlDataReader对象绑定: SqlDataReader areader = runner.Reader; dgSearchResults.DataSource = areader; dgSearchResults.DataBind(); 我已经为我的网格创建了一个ItemDataBound事件,我想检查一个特定列/单元格的值,当每个项都被绑定时,我可以启用/禁用一些标志 如何获取ItemDataBound上特定单元格“SvcID”的值

我有一个DataGrid,其中数据源与SqlDataReader对象绑定:

  SqlDataReader areader = runner.Reader;
  dgSearchResults.DataSource = areader;
  dgSearchResults.DataBind();
我已经为我的网格创建了一个ItemDataBound事件,我想检查一个特定列/单元格的值,当每个项都被绑定时,我可以启用/禁用一些标志

如何获取ItemDataBound上特定单元格“SvcID”的值

这是我的密码:

 public void dgSearchResults_ItemDataBound(object sender,  DataGridItemEventArgs e)
    {

        if (ViewState["SvcIDs"] != null)
        {
            if (e.Item != null)
            {
                var svcIds = (List<int>) ViewState["SvcIDs"];

                if (svcIds.Contains(Convert.ToInt32(**DataGrid SvcID Goes Here**))
                {
                    //TODO: enable/disable some icons
                }
            }
        }
    }
public void dgSearchResults\u ItemDataBound(对象发送方,DataGridItemEventArgs e)
{
if(ViewState[“SvcIDs”]!=null)
{
如果(如项目!=null)
{
var svcIds=(列表)ViewState[“svcIds”];
if(svcIds.Contains(Convert.ToInt32(**DataGrid-SvcID在这里**))
{
//TODO:启用/禁用某些图标
}
}
}
}
我以前使用过RowDataBound事件,但没有用于DataGrid控件,所需的步骤似乎有点不同

根据我的SvcIds(使用索引)列表检查我的DataGrid中列“SvcID”的值的代码是什么


谢谢

很遗憾,您无法使用列名或数据绑定字段名为单元格集合编制索引

为此,您需要知道数据字段的索引(例如,在您的示例中为
SvcID
)并为
对象编制索引。如果您使用的是
AutogenerateColumns
,则索引将基于您从数据库查询的列的顺序

然后,您可以处理
RowDataBound
事件,该事件具有类型为
GridViewRowEventArgs
的事件参数,允许您访问DataGridView行实例。然后您可以执行以下操作:

string val= e.Row.Cells(index).Text;

很遗憾,您无法使用列名或数据绑定字段名为单元格集合编制索引

为此,您需要知道数据字段的索引(例如,在您的示例中为
SvcID
)并为
对象编制索引。如果您使用的是
AutogenerateColumns
,则索引将基于您从数据库查询的列的顺序

然后,您可以处理
RowDataBound
事件,该事件具有类型为
GridViewRowEventArgs
的事件参数,允许您访问DataGridView行实例。然后您可以执行以下操作:

string val= e.Row.Cells(index).Text;

您可以使用以下选项访问单元格:

e.Item.Cells[index].Text;

您可以使用以下选项访问单元格:

e.Item.Cells[index].Text;

如果文本位于第二个单元格中


e、 Item.Cells[2]。如果文本位于第二个单元格中,则显示文本


e、 项目.单元格[2].Text

获取数据域的索引不是问题。但是,我没有访问e.Row.Cells的权限?e是您的事件参数。它是您过程的参数。那么“您没有访问权限”是什么意思呢?哦,我的错。。您可以使用
RowDataBound
事件,而不是获取数据域的索引不是问题。但是,我没有访问e.Row.Cells?e是你的事件参数。它是你过程的参数。那么“你没有访问权”是什么意思呢?哦,我的错。你可以使用
RowDataBound
事件来代替它。谢谢。我本来希望.Text属性有一个列名,但实际上只要e.Item.ItemIndex>=0,它就有一个列值!谢谢。我实际上希望.Text属性有一个列名,但实际上只要e.Item.ItemIndex>=0,它就有一个列值!