0

データリストにバインドされているため、コントロールにカスタム属性を設定する必要があります。イベント引数にコントロールのコレクションがあることがわかりますが、それらに関連付けられた参照名がありません。これはどのように行うことができますか?

これを試すと:

(e.Item.FindControl("autoChartChkBox") as CheckBox).Attributes.Add("CompanyToken", "CompanyToken");

コントロールは常に「null」です。検索しようとしているコントロールがデータ テンプレートに追加されています。これは私のItemTemplate課題で、下は実際の寺院です。これは、イベントprotected CheckBox autoChartChkBox;を介して操作しようとしているコントロールであることに注意してください。OnDataItemBound

   alertList.ItemTemplate = new AlertItemTemplate(groupTracker);


  private class AlertItemTemplate : ItemTemplateBase 
    {
        private readonly GroupHeaderTracker groupTracker;
        protected CheckBox autoChartChkBox;


        public override void DataBind() 
        {

            Label autoChartLbl;


            Alert item = (Alert)((DataListItem)this.NamingContainer).DataItem;

            CultureInfo info = Thread.CurrentThread.CurrentCulture;
            titleText.Text = String.Format("{0} - {1}", item.DateCreated.ToString(info.DateTimeFormat.ShortDatePattern), item.ID);
            this.bodyText.Text = item.Text;

            Color color = GetAlertColor(item.AlertType.Color);
            colorDisplay.BackColor = color;

            this.groupTracker.SetCurrentAlertTypeId(item.AlertType.ID);

            if(this.groupTracker.IsNewGroup())
            {
                this.alertTypeNameLabel.Text = item.AlertType.Name;
                this.alertTypeNameRow.Visible = true;
                this.alertTypeNameRow.Cells[0].Style.Add("border-top", string.Format("solid thin {0}",GetColorHexValue(color)));
                this.alertTypeNameRow.Cells[0].Style.Add("border-bottom", string.Format("solid thin {0}",GetColorHexValue(color)));

                //Auto Chart
                TableCell autoChartCell;
                autoChartCell = new TableCell();
                autoChartCell.Width = 50;
                autoChartCell.BorderStyle = BorderStyle.Solid;
                autoChartCell.VerticalAlign = VerticalAlign.Top;
                autoChartCell.Controls.Add(autoChartChkBox = new CheckBox());
                autoChartCell.Controls.Add(autoChartLbl = new Label());
                Rows[1].Cells.Add(autoChartCell);
                autoChartLbl.Text = "AutoChart";
                autoChartChkBox.Checked = item.IncludeInChartNotes;

                alertTypeNameCell.ColumnSpan = Rows[1].Cells.Count;

            }
4

2 に答える 2

2
(e.Item.FindControl("yourControlName") as YourControlType).Attributes.Add("onClick","DoSomethingHere()");
于 2009-12-10T22:15:31.093 に答える
0

コードビハインドでビルドItemTemplateしています(私の選択ではありません)。いずれにせよ、見つけようとしているコントロールに明示的に名前を付ける必要があります。

autoChartChkBox.ID = "autoChartChkBox";

次に、OnItemDataBoundイベントでこの ID を への引数として使用しますFindControl()

私の場合:

protected void Data_ItemBound(object sender, DataListItemEventArgs e)
{
    if (e.Item.DataItem != null)
    {
        if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            CheckBox control = (CheckBox)e.Item.FindControl("autoChartChkBox");
        }
    }
}

これが他の誰かに役立つことを願っています。

于 2009-12-11T02:59:09.337 に答える