2009-09-28 3 views
0

일부 Image Button을 my gridview에 넣었지만 클릭 이벤트를 캡처 할 수 없습니다. 클릭 이벤트를 만들거나 그리드 뷰에서 OnRowCommand 핸들러를 만들지 마십시오.asp.net의 gridview에서 단추 클릭을 캡처 할 수 없습니다.

버튼을 클릭하면 현재 페이지로 간단하게 다시 게시됩니다.

나는 이런 식으로 내 버튼을 추가 :

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     string status = DataBinder.Eval(e.Row.DataItem, "visitstatusuid").ToString(); 

     string visitUID = DataBinder.Eval(e.Row.DataItem, "visituid").ToString(); 

     Color backColor = Color.White; 
     Color foreColor = Color.Black; 

     ImageButton b; 

     switch (status) 
     { 
      case "U": // Unallocated 
       backColor = ColorTranslator.FromHtml("#B2A1C7"); 
       b = new ImageButton(); 
       b.Width = Unit.Pixel(25); 
       b.Height = Unit.Pixel(30); 
       b.AlternateText = "Book"; 
       b.ImageUrl = "../../Images/New/booking.gif"; 
       b.ToolTip = "Booking"; 
       b.CommandName = "Booking"; 
       b.CommandArgument = visitUID; 
       b.CausesValidation = false; 

       e.Row.Cells[(e.Row.Cells.Count - 3)].Controls.Add(b); 

답변

0

버튼이 생성 될 때 당신은 핸들러를 첨부해야합니다 :

b.Click += MyButtonClickEventHandler; 

:
OnRowDataBound 처리기에서 단추를 만드는 대신 OnRowCreated를 사용하십시오.
이렇게하면 포스트 백에서 버튼이 다시 만들어집니다.

예 : 당신의 접근 방식에 대한

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) { 
    BindData(); 
    } 
} 

protected void BindData() 
{ 
    // Do your databinding here. 
} 

protected void MyGridView_RowCreated(object sender, GridViewRowEventArgs e) 
{ 
    var b = new ImageButton(); 
    b.AlternateText = "Click Me!"; 
    // Etc. 

    b.Click += MyButton_Click; 
    // Add the button to the column you want. 
} 

protected void MyButton_Click(object sender, ImageClickEventArgs e) 
{ 
    // Do your thing... 
} 
+0

) 사실, b.Click + new ImageClickEventHandler (gridviewButtonClick)을 시도했지만 중단 점이 발생했지만 중단 점에 도달하지 않습니다. 단추를 클릭하면 – NibblyPig

+0

단추를 클릭하면 다시 게시가 발생합니다. 포스트 백에 단추를 다시 만드시겠습니까? –

0

다른 곳에서 당신이 당신의 영문 파일의 페이지 지시어에 AutoEventWireup="true"을 설정해야하는 이벤트 핸들러를 추가하지 않는 한.

내가 명시 적으로 이벤트를 배선 그래서보다는 AutoEventWireup를 사용하여 OnInit 방법이 줄을 추가 선호 말했다되고 그건 :

gridview1.RowDataBound += this.gridview1_RowDataBound; 
+0

이미 설정되어 있습니다. ( – NibblyPig

+0

이 두 가지가 작동하지 않습니다. ( – NibblyPig

0

, 당신은 모든 페이지로드에 그리드를 리 바인드해야 작동하고 당신이 순서, 라이프 사이클에서의 OnLoad 늦어도 그것을 없는지 확인 RowDataBound를 사용하여 클릭 이벤트는 시간에 등록됩니다.

내가 성공한 다른 방법은 DataGrid 버튼 설정을 수행하는 새로운 방법을 만드는 것입니다.

void PerformConditionalGridFormatting() 
{ 
    foreach (GridViewRow row in gvCaseList.Rows) 
    { 
     if (row.RowType == DataControlRowType.DataRow) 
     { 
      ... Add your buttons to the cells here 
     } 
    } 
} 

그럼 당신은 당신의 onLoad 핸들러에서 즉 모든 포스트 백에 또한 방법 당신이 수동으로 데이터 바인딩을 수행 할 때마다 호출하고 수행

if (Page.IsPostBack) PerformConditionalGridFormatting(); 

이 방법의 장점은 없다는 것입니다 자원을 저장하는 모든 포스트 백에서 데이터 바인딩해야합니다.

0

있는 gridview에 대한 RowCommand 이벤트 핸들러를 생성하고하지에 격자의 결합 이벤트를 넣어

void gridview1_RowCommand(object sender, args e) 
{ 

if (e.CommandName == "Booking") 
{ 
// call your desired method here 
} 

} 
0

의 효과에 그것을

뭔가를 트리거링 버튼입니다 있는지 확인하기 위해 명령 이름을 확인 다시 게시하십시오.

관련 문제