0

私はこの機能に何度か取り組んでいますが、まったく機能していません。コードでグリッドビューにデータを入力し、クリックすると行の詳細を開くボタンを追加します。

データテーブルの作成中にボタンを追加しようとしましたが、機能しません。row_databound メソッドにボタンを追加しようとした後。レンダリングしているがイベントクリックを発生させていないボタン。

semblify コードに従ってください。この問題を解決するためにあなたが私を助けてくれることを願っています。

よろしくお願いします。P

protected void btnSearch_Click(object sender, EventArgs e)
{
    string sSearchQuery = "(" + TextBox1.Text + ")";
    loadDynamicGrid(sSearchQuery);
}

private void loadDynamicGrid(string sSearchQuery)
    {
        //search
       .....     
       var oHitColl = searcher.Search(oParser.Parse(sSearchQuery));

        //istance of DataTable
        gvResult.Columns.Clear();
        gvResult.DataSource = null;

        DataTable dt = new DataTable();


        DataColumn dcol = new DataColumn("Id", typeof(System.String));
        dt.Columns.Add(dcol);
        dcol = new DataColumn("Table", typeof(System.String));
        dt.Columns.Add(dcol);
        dcol = new DataColumn("Summary", typeof(System.String));
        dt.Columns.Add(dcol);
        dcol = new DataColumn("Link", typeof(System.String));
        dt.Columns.Add(dcol);
        dcol = new DataColumn("Button", typeof(Button));
        dt.Columns.Add(dcol);


        //Populate la datatable
        for (int i = 0; i < oHitColl.Length(); i++)
        {
            Document oDoc = oHitColl.Doc(i);

            DataRow drow = dt.NewRow();
            drow["Table"] = oDoc.Get("Table");
            drow["Summary"] = oDoc.Get("Summary");
            drow["Id"] = oDoc.Get("Id");
            string url = ....".aspx";
            drow["Link"] = linkText;
            //Button btn = CreateButton("dinamicBtn" + i.ToString(), "dinamicBtn" + i.ToString());
            //drow["Button"] = btn;
            dt.Rows.Add(drow);
        }

        // add columus in GridView
        foreach (DataColumn col in dt.Columns)
        {
            //Dichiarare i campi bindati e allocare la memoria che serve
            BoundField bfield = new BoundField();
            bfield.DataField = col.ColumnName;
            bfield.HeaderText = col.ColumnName;
            gvResult.Columns.Add(bfield);

        }

        gvResult.DataSource = dt;
        gvResult.DataBind();
        searcher.Close();
    }

protected void gvResult_RowDataBound(object sender, GridViewRowEventArgs e)
{
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Button btn = new Button();
            btn = CreateButton("btnOpen_"+ e.Row.RowIndex.ToString(), "Open");
            btn.DataBinding +=new EventHandler(btn_DataBinding);
            e.Row.Cells[e.Row.Cells.Count - 1].Controls.Add(btn);

        }
    }

private Button CreateButton(string id, string name)
{       
    Button b = new Button();
    b.Text = name;
    b.ID = id;
    b.Click += new EventHandler(Dynamic_Method);
    b.DataBinding += new EventHandler(btn_DataBinding);
    return b;
}

private void btn_DataBinding(object sender, EventArgs e)
    {
        object bound_value_obj = null;
        Control ctrl = (Control)sender;
        IDataItemContainer data_item_container = (IDataItemContainer)ctrl.NamingContainer;
        bound_value_obj = DataBinder.Eval(data_item_container.DataItem,"gvResult.Rows.Count.ToString()");
    }

protected void Dynamic_Method(object sender, EventArgs e)
{
    Response.Write("You have clicked at: "+DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt"));
}
4

1 に答える 1

0

動的に作成するコントロールは、ポストバックごとに再追加する必要があり、イベントはポストバックごとにフックする必要があります。さらに、OnInitメソッドでこれを行う必要があります。

于 2012-03-20T18:50:17.990 に答える