2011-08-31 18 views
5

दर्ज करने के लिए ग्रिड व्यू पंक्ति पर कहीं भी क्लिक करें, मैं ग्रिड व्यू पंक्ति में कहीं भी एक क्लिक का उपयोग करके संपादन बटन की समान कार्यक्षमता को डुप्लिकेट करना चाहता हूं।संपादन मोड

नीचे कोड इस करता है, लेकिन एक बड़ी समस्या के साथ: उपयोगकर्ता अगले, संपादित करें आदेश आग फिर से करने के लिए एक पाठ बॉक्स के बंद पर क्लिक करता है, और पिछले पाठ बॉक्स में किए गए परिवर्तनों इसे वापस करने के लिए वापस अगर है मूल मूल्य ।

इस व्यवहार को ठीक करने के तरीके पर कोई सुझाव?

या, क्या यह पूरा करने के लिए एक बेहतर तरीका है?

संपादित करें: यह 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

मैं बजाय row.DataItemIndex 2 पैरामीटर के रूप में उपयोग करने का मेरा RowDataBound हैंडलर के लिए इस कोड जोड़ा, और फिर, मैं gv.DataKeys (e.Row.RowIndex) .Value इस्तेमाल किया मैं तो RowEditing में घटना को पकड़ने घटना और e.NewEditIndex पंक्ति सूचकांक की बजाय मेरे आइटम की आईडी है। – yougotiger

उत्तर

6

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

धन्यवाद, मैं उन दिनों के लिए साइट्स के एक टन से गुज़र रहा हूं जहां कोड अपूर्ण था या काम नहीं किया था। यह मेरी जरूरत के समान है, महान उदाहरण! – codeape

+0

मैंने ग्रिडव्यू पंक्ति को क्लिक इवेंट पर संपादन योग्य के रूप में बनाया है और फिर संपादन करने के बाद कैसे सहेजना है ... –

+0

@ jim31415 मुझे अपनी प्रोजेक्ट पर एक ही कार्यक्षमता की आवश्यकता है, लेकिन मुझे निम्नलिखित त्रुटि हैफ्लैग के तहत निम्न त्रुटि मिल रही है: त्रुटि 8 \t ' System.Web.UI.WebControls.DataControlRowState 'में' हैस्फ्लैग 'की परिभाषा नहीं है और' System.Web.UI.WebControls.DataControlRowState 'प्रकार का पहला तर्क स्वीकार करने वाली कोई एक्सटेंशन विधि' हैस्फ्लैग 'नहीं मिल सकती है (क्या आप गायब हैं एक प्रयोग निर्देश या एक असेंबली संदर्भ?) क्या आप इस समस्या का सामना किया ?? – HackMaster

0

मैं परीक्षण नहीं किया था इस के रूप में मैं GridView का उपयोग नहीं करते, लेकिन मैं अन्य नियंत्रणों के साथ कार्य करें: नीचे कोड देखें। आप जावास्क्रिप्ट के माध्यम से पंक्ति पर पंक्ति में छिपा बटन डाल दिया और Click कॉल करने के लिए सक्षम होना चाहिए:

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

प्रतिक्रिया के लिए धन्यवाद, मैं इसे आज़मा दूंगा। – jim31415

+0

मुझे वही व्यवहार मिलता है। एक बार संपादन मोड में, टेक्स्टबॉक्स में क्लिक करने से फिर से संपादन आदेश ट्रिगर होता है। – jim31415

संबंधित मुद्दे