Это может быть связано с тем, как вы заполняете свое сеточное представление, или с тем, как вы настраиваете свой GridView для хранения DataKeys, вы можете опубликовать оба кода, где вы устанавливаете свой компонент GridView на своей странице .aspx (html-код) а где ты его заселил?
EDIT:
Я попробовал ваш пример, и единственное отличие состоит в том, что я получаю источник данных из списка, интеад элемента управления DataSource, отлично работает здесь, и я Ctrl + c / Ctrl + v ваш код, так что посмотрите;
публичный класс MyClass
{
public int productId {get; задавать; }
открытая строка MUS_K_ISIM {get; задавать; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<MyClass> ChechkBoxDataSource = new List<MyClass>();
ChechkBoxDataSource.Add(new MyClass() { productId = 1, MUS_K_ISIM = "Stack" });
ChechkBoxDataSource.Add(new MyClass() { productId = 2, MUS_K_ISIM = "Overflow" });
ChechkBoxDataSource.Add(new MyClass() { productId = 3, MUS_K_ISIM = "Example" });
GridView1.DataSource = ChechkBoxDataSource;
GridView1.DataBind();
}
}
protected void Unnamed1_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox cb = (CheckBox)row.FindControl("ProductSelector");
if (cb != null && cb.Checked)
{
int productID = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value);
Response.Write(string.Format("This would have deleted ProductID {0}<br />", productID));
}
}
}
}