2011-08-31 28 views
5

Tôi muốn sao chép cùng một chức năng của nút chỉnh sửa bằng cách sử dụng một cú nhấp chuột ở bất kỳ đâu trong hàng GridView.Nhấp vào bất kỳ nơi nào trên hàng GridView để vào chế độ chỉnh sửa

Đoạn mã dưới đây thực hiện việc này, nhưng với một vấn đề lớn: nếu người dùng nhấp vào một hộp văn bản sang hộp văn bản tiếp theo, lệnh chỉnh sửa sẽ kích hoạt lại và các thay đổi được thực hiện cho hộp văn bản trước đó sẽ trở lại giá trị ban đầu của nó .

Bất kỳ đề xuất nào về cách khắc phục hành vi này?

Hoặc, có cách tiếp cận tốt hơn để hoàn thành việc này không?

EDIT: Điều này đã được giải quyết bằng cách thêm séc cho row.RowState.HasFlag(DataControlRowState.Edit). Xem mã bên dưới:

protected override void Render(System.Web.UI.HtmlTextWriter writer) 
{ 
    foreach(GridViewRow row in gvwOrderItems.Rows) 
    { 
     if(row.RowType == DataControlRowType.DataRow && 
      row.RowState.HasFlag(DataControlRowState.Edit) == false) 
     { 
      // enable click on row to enter edit mode 
      row.Attributes["onclick"] = 
       ClientScript.GetPostBackClientHyperlink(gvwOrderItems, "Edit$" + row.DataItemIndex, true); 
     } 
    } 
    base.Render(writer); 
} 
+0

tôi đã thêm mã này để xử lý RowDataBound của tôi, và sau đó thay vì sử dụng row.DataItemIndex như tham số thứ 2, tôi đã sử dụng gv.DataKeys (e.Row.RowIndex) .Value sau đó tôi bắt sự kiện trong RowEditing sự kiện và e.NewEditIndex là ID của mục của tôi chứ không phải chỉ mục hàng. – yougotiger

Trả lời

6

Kiểm tra row.RowState.HasFlag(DataControlRowState.Edit).

protected override void Render(System.Web.UI.HtmlTextWriter writer) 
{ 
    foreach(GridViewRow row in gvwOrderItems.Rows) 
    { 
     if(row.RowType == DataControlRowType.DataRow && 
      row.RowState.HasFlag(DataControlRowState.Edit) == false) 
     { 
      // enable click on row to enter edit mode 
      row.Attributes["onclick"] = 
       ClientScript.GetPostBackClientHyperlink(gvwOrderItems, "Edit$" + row.DataItemIndex, true); 
     } 
    } 
    base.Render(writer); 
} 
+0

Cảm ơn, tôi đã trải qua hàng tấn trang web trong những ngày mã không hoàn chỉnh hoặc không hoạt động. Điều này tương tự như những gì tôi cần, ví dụ tuyệt vời! – codeape

+0

Tôi đã tạo hàng GridView là có thể chỉnh sửa trên sự kiện nhấp và sau đó cách lưu sau khi thực hiện chỉnh sửa ... –

+0

@ jim31415 tôi cần cùng chức năng trên dự án của mình nhưng tôi nhận được lỗi sau theo hasflag: Lỗi 8 \t ' System.Web.UI.WebControls.DataControlRowState 'không chứa một định nghĩa cho' HasFlag 'và không có phương pháp mở rộng' HasFlag 'chấp nhận một đối số đầu tiên của loại' System.Web.UI.WebControls.DataControlRowState 'có thể được tìm thấy (bạn đang thiếu một bằng cách sử dụng chỉ thị hoặc một tham chiếu lắp ráp?) Bạn đã phải đối mặt với vấn đề này? – HackMaster

0

Tôi không kiểm tra điều này vì tôi không sử dụng GridView nhưng tôi làm điều đó với các điều khiển khác. Bạn sẽ có thể đặt nút ẩn trong hàng và gọi Click trên hàng qua JavaScript:

protected override void Render(System.Web.UI.HtmlTextWriter writer) 
{ 
    foreach(GridViewRow row in gvwOrderItems.Rows) 
    { 
     if(row.RowType == DataControlRowType.DataRow) 
     { 
      Button b = new Button(); 
      b.ID = "whatever"; 
      b.CommandName = "edit"; 
      b.Attributes.Add("style","display:none;") 
      row.Controls.Add(b); 
      // enable click on row to enter edit mode 
      row.Attributes.Add("onclick" ,"document.getElementById('" bla.ClientID "').click();"); 
     } 
    } 
    base.Render(writer); 
} 
+0

Cảm ơn bạn đã trả lời, tôi sẽ thử. – jim31415

+0

Tôi nhận được cùng một hành vi. Khi ở chế độ chỉnh sửa, nhấp vào một hộp văn bản sẽ kích hoạt lại lệnh chỉnh sửa. – jim31415

Các vấn đề liên quan