我知道我必须遗漏一些东西。如果我在RadGrid的ItemDataBound事件中对datagriditem进行更改,则在第一次加载页面时看不到更改,在通过CommandItem刷新网格以进行刷新之前,我看不到对DataItem的更改。我已经验证了ItemDataBound事件被触发,我替换的值确实具有正确的值。
背景: 我有一个创建RadGrid的类。然后将其实例化并通过.aspx后面的代码加载到.aspx页面中。这是一个主/详细数据网格,如果这有任何区别。
protected void Page_Init(object source, EventArgs e)
{
this.__activeBatchesRadGrid = ActiveBatchesRadGrid.GridDefinition("ActiveBatchesRadGrid");
this.PlaceHolder1.Controls.Add(this.__activeBatchesRadGrid);
this.__activeBatchesRadGrid.ItemDataBound += new GridItemEventHandler(ActiveBatchesRadGrid_ItemDataBound);
}
private void ActiveBatchesRadGrid_ItemDataBound(object sender, GridItemEventArgs e)
{
GridDataItem _dataItem = e.Item as GridDataItem;
if (_dataItem == null) return;
BatchStatusType _batchStatus = EnumUtils.GetValueFromName<BatchStatusType>(_dataItem["BatchStatusName"].Text);
Dictionary<BatchStatusType, BatchStatusType> _batchStatusTypes =
BatchTransitions.GetBatchStatusTransition(_batchStatus);
GridButtonColumn _btnPromote =
((GridButtonColumn) this.__activeBatchesRadGrid.MasterTableView.GetColumn("MasterPromoteRecord"));
GridButtonColumn _btnDelete =
((GridButtonColumn)this.__activeBatchesRadGrid.MasterTableView.GetColumn("MasterDeleteRecord"));
foreach (KeyValuePair<BatchStatusType, BatchStatusType> _item in _batchStatusTypes)
{
_btnPromote.Text = _item.Value.ToString();
_btnPromote.ConfirmText = string.Format("Are you sure you want to promote this batch to {0} status?",
_item.Value);
_btnDelete.Text = string.Format("Demote batch to {0} status.", _item.Key.ToString());
_btnDelete.ConfirmText = string.Format("Are you sure you want to demote this batch to {0} status?",
_item.Key);
}
}
答案 0 :(得分:1)
我以为我会发布解决这个问题的解决方案。但是,我仍然相信我最初发布的正确实现应该可行。如果它适用于第一个数据网格行以外的所有项目,那么我认为控件存在缺陷。
private void ActiveBatchesRadGrid_ItemDataBound(object sender, GridItemEventArgs e)
{
GridDataItem _dataItem = e.Item as GridDataItem;
if (_dataItem == null) return;
if (_dataItem.KeyValues == "{}") { return; }
int _counter = 0;
Dictionary<String, String> _batchStatusTypes =
BatchTransitions.GetBatchStatusTransition(
EnumUtils.GetValueFromName<BatchStatusType>(_dataItem["BatchStatusName"].Text));
//accessing the cell content directly rather than trying to access the property of the GridEditCommandColumn
((ImageButton)(((GridEditableItem)e.Item)["MasterEditrecord"].Controls[0])).ImageUrl = "/controls/styles/images/editpencil.png";
//accessing the cell content directly rather than trying to access the property of the GridButtonColumn
ImageButton _imgbtnPromote = (ImageButton)((GridDataItem)e.Item)["MasterPromoteRecord"].Controls[0];
ImageButton _imgbtnDelete = (ImageButton)((GridDataItem)e.Item)["MasterDeleteRecord"].Controls[0];
foreach (KeyValuePair<String, String> _kvp in _batchStatusTypes)
{
if (_counter == 0)
{
const string _jqueryCode = "if(!$find('{0}').confirm('{1}', event, '{2}'))return false;";
const string _confirmText = "Are you sure you want to change the status of this batch {0}?";
_imgbtnPromote.Attributes["onclick"] = string.Format(_jqueryCode, ((Control) sender).ClientID,
string.Format(_confirmText, _kvp.Value),
_kvp.Value);
_imgbtnDelete.Attributes["onclick"] = string.Format(_jqueryCode, ((Control) sender).ClientID,
string.Format(_confirmText, _kvp.Key), _kvp.Key);
_counter++;
continue;
}
_imgbtnPromote.ImageUrl = "~/controls/styles/images/approve.png";
_imgbtnPromote.ToolTip = string.Format("{0} batch", _kvp.Value);
_imgbtnDelete.ImageUrl = "/controls/styles/images/decline.png";
_imgbtnDelete.ToolTip = string.Format("{0} batch", _kvp.Key);
}
}