我已经通过codebehind在gridview中创建了一个复选框。这是在代码后面完成的,因为要呈现的控件的类型取决于数据库中的“类型”字段。 (System.Boolean)
我已经创建了复选框,并为OnCheckChanged添加了事件处理程序,但是启用回发后它也不会触发。我知道我应该将值保存到viewstate,但是我似乎无法从控件中捕获任何事件来保存新值!
if (PreferenceType.ToLower() == "system.boolean")
{
var cb = new CheckBox();
cb.ID = "chkPreferenceValue";
div.Controls.Add(cb);
if (mode == RenderMode.Insert)
hfPrefValue.Value = cb.Checked.ToString();
else
{
var chk = false;
bool.TryParse(hfPrefValue.Value, out chk);
cb.Checked = chk;
}
cb.AutoPostBack = true;
cb.Visible = true;
cb.CheckedChanged += new EventHandler(InsertPropValueFromInsertCB_CheckedChanged);
}
这是事件,我试图将其保存到隐藏字段和viewstate中,但由于事件从未发生,因此均无效。
private void InsertPropValueFromInsertCB_CheckedChanged(object sender, EventArgs e)
{
var cb = sender as CheckBox;
var hf = cb.FindSiblingRecursive<HiddenField>("hfNewPreferenceValue");
hf.Value = cb.Checked.ToString();
ViewState[$"PropRowValue{((GridViewRow)hf.Parent.Parent).RowIndex}"] = cb.Checked;
}