2009-08-27 16 views
7

इसे हल करने के लिए कुछ मदद की आवश्यकता है।asp.net ग्रिडव्यू चेकबॉक्स चयन

मेरे पास ग्रिडव्यू है और ग्रिडव्यू के अंदर मेरे पास एक चेकबॉक्स है और चेकबॉक्स पर क्लिक करने के बाद, मैं एक पोस्टबैक ईवेंट कर रहा हूं और केवल इस डेटाबेस पर ही इस विशेष पंक्ति को अपडेट करने का प्रयास कर रहा हूं।

यह मेरा ग्रिडव्यू चेकबॉक्स कोड है। ऑन चेकड चेंजेड देखें।

<asp:TemplateField HeaderText="Sample"> 
    <ItemTemplate> 
    <asp:CheckBox runat="server" 
        ID="chkSample" 
        Checked='<%# Bind("Sample") %>' 
        OnCheckedChanged="UpdateSupplyLed" 
        AutoPostBack="True"> 
    </asp:CheckBox> 
    </ItemTemplate> 
</asp:TemplateField> 

कोड:

protected void UpdateSupplyLed(object sender, EventArgs e) 
{ 
    foreach (GridViewRow di in SamplingGridView.Rows)  
    {   
     CheckBox chkBx = (CheckBox)di.FindControl("chkSample"); 
     if (chkBx != null && chkBx.Checked) 
     { 
      //update database logic here. 
     } 
    } 
} 

उपरोक्त कोड ठीक काम करता है, लेकिन यह मुझे सभी चेक बॉक्स कि एक है कि मैं सिर्फ जाँच की irresepective जाँच कर रहे हैं हो रही है। मैं उन सभी को नहीं चाहता।

मैं केवल एक ही पंक्ति मूल्य प्राप्त कर सकता हूं जिसे अभी चेक किया गया है। कुछ पंक्तियों को पहले से ही चेक किया जा सकता है क्योंकि स्थिति उन रिकॉर्ड्स के लिए सच है और मैं उन रिकॉर्ड्स को अपडेट नहीं करना चाहता हूं।

मुझे लगता है कि मुझे अपना प्रश्न सही मिला है!

अद्यतन: जवाब है:

protected void UpdateSupplyLed(object sender, EventArgs e) 
{ 
    CheckBox chkSampleStatus = sender as CheckBox;   
    bool sample = chkSampleStatus.Checked;    
    GridViewRow row = chkSampleStatus.NamingContainer as GridViewRow;   
    TextBox txtId = row.FindControl("Id") as TextBox;    
    int id = Int32.Parse(txtId.Text); 
} 

उत्तर

7

इस प्रयास करें:

CheckBox chkBx = sender as CheckBox; 

बजाय पुनरावृति सभी पंक्तियों।

मैंने चेकबॉक्स का ग्रिड व्यू में इस तरह से उपयोग नहीं किया है। आमतौर पर मैं ग्रिड व्यू के ऑनरो कॉमांड इवेंट का उपयोग करता हूं और डेटाबेस को अपडेट करने के लिए रोइंडेक्स या कमांड ऑर्ग्यूमेंट मान का उपयोग करता हूं।

इसके बारे में सोचना ऑनरॉमैंड एक चेकबॉक्स के लिए मुश्किल हो सकता है, एक बेहतर समाधान चेकबॉक्स की चेक चेंजेड घटना के साथ चिपक सकता है और नियंत्रण नामकरण नियंत्रक का उपयोग कर ग्रिडव्यूरो सर्वरसाइड पर जा सकता है। कुछ की तरह:

GridViewRow row = chkBx.NamingContainer as GridViewRow; 

मैं चला जाता है चेक बॉक्स => सेल संभालने कर रहा हूँ => यदि आप गूगल ASP.NET NamingContainer आप कुछ और बारीकियों मिलेगा पंक्ति। ऊपर यदि वास्तव में

DataTable dtGetStTable = (DataTable)ViewState["dtNewStudents"]; 

//Looping throgh Grid and deleting row after finding the checked row 
for (int i = dtGetStTable.Rows.Count - 1; i > -1; i--) 
{ 
GridViewRow row = GridView1.Rows[i]; 
bool isChecked = ((CheckBox)row.FindControl("CheckBox1")).Checked; 

if (isChecked) 
{ 
    try 
    { 
     string RollNo = dtGetStTable.Rows[i]["RollNo"].ToString(); 
     string Class = dtGetStTable.Rows[i]["Class"].ToString(); 
     string Division = dtGetStTable.Rows[i]["Division"].ToString(); 
     //Deleting the Reocrd from DataBase 
     TotalRecordDeleted += objSRE.DeleteTheSelectedRecord(RollNo, Class, Division); 

     dtGetStTable.Rows[i].Delete(); 
     dtGetStTable.AcceptChanges(); 
    } 
    catch (Exception ex) 
    { 

     //throw; 
    } 
} 

काम नहीं कर रहा

+0

अपने जवाब के लिए धन्यवाद। लेकिन मुझे उसी पंक्ति से कुछ अन्य मूल्यों की आवश्यकता है तो मैं उस विशेष ग्रिडव्यू पंक्ति की पंक्ति आईडी कैसे प्राप्त कर सकता हूं। ताकि मैं रिकॉर्ड के आईडी प्राप्त कर सकूं। – Supremestar

+0

तब मैं बाध्यकारी नहीं करने की सलाह देते चेकबॉक्स का OnCheckChanged, GridViews का उपयोग OnRowCommand बजाय, पंक्ति GridVieweCommandEventArgs में –

+0

HollyStyles, मैं GridView तो GridView पंक्ति आदेश फायरिंग नहीं है में एक का चयन करें आदेश क्षेत्र नहीं है आपूर्ति की है। मुझे अपने दोस्त को क्या करना चाहिए? कृपया मदद करें। – Supremestar

0

भी इस प्रयास करें}

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