2012-01-18 8 views
7

में सिस्टम.Web.UI.WebControls.GridView प्रकार की ऑब्जेक्ट डालने में असमर्थ। मैंने एक विधि लिखा है जो हटाए गए बटन पर क्लिक होने पर मेरे एएसपीनेट ग्रिडव्यू से पंक्तियां हटा देता है और संपादन बटन के लिए एक और तरीका क्लिक किया गया है दोनों संपादन और हटाएं बटन ग्रिडव्यू नियंत्रण में निर्मित हैं।एएसपी.NET

हालांकि जब मैं इन बटनों को दबाता हूं (संपादित/हटाता हूं) और अपवाद फेंक दिया जाता है। 'System.Web.UI.WebControls.Button' टाइप करने के लिए 'System.Web.UI.WebControls.GridView' प्रकार का ऑब्जेक्ट डालने में असमर्थ। जो लाइन

Button btn = (Button)sender; 

समस्या यहां पर इशारा कर रही है कि इस लाइन को संपादित के दोनों से संबंधित या तरीकों को नष्ट नहीं किया जाता है। यह किसी अन्य कॉलम में एएसपी बटन से संबंधित है, और इसी कारण से मैं खो गया हूं। मेरे द्वारा इस समस्या का समाधान कैसे किया जा सकता है? शोResponses विधि के साथ OnRowDeleting और OnRowEditing संघर्ष दोनों का क्या कारण बन रहा है?

यहाँ aspx

<asp:GridView runat="server" ID="gvShowQuestionnaires" HeaderStyle-CssClass="table_header" CssClass="view" AlternatingRowStyle-CssClass="alt" AlternatingRowStyle-BackColor="#f3f4f8" AutoGenerateColumns="False" 
       DataKeyNames='QuestionnaireID' OnRowDeleting="gvShowQuestionnaires_RowDeleting" OnRowEditing="gvShowQuestionnaires_RowEdit" FooterStyle-CssClass="view_table_footer" OnRowCommand="showResponses"> 
    <Columns> 
     <asp:BoundField DataField="QuestionnaireID" HeaderText="ID" HeaderStyle-Width="80px" ItemStyle-CssClass="bo"></asp:BoundField> 
     <asp:BoundField DataField="QuestionnaireName" HeaderText="Questionnaire Name" />   
     <asp:TemplateField HeaderText="Results" HeaderStyle-Width="150px"> 
      <ItemTemplate> 
       <asp:Button runat="server" ID="button1" CommandArgument='<%# Eval("QuestionnaireID") %>' OnClick="showResponses" text="Results"/> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:CommandField HeaderText="Options" ShowDeleteButton="True" ShowEditButton="true" EditText="Edit"></asp:CommandField> 
    </Columns> 
</asp:GridView> 

यहाँ है और पीछे कोड है:

protected void gvShowQuestionnaires_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
    int questionnaireID = (int)gvShowQuestionnaires.DataKeys[Convert.ToInt32(e.RowIndex)].Value; 
    GetData.DeleteQuestionnaire(questionnaireID); 
    gvShowQuestionnaires.DataSource = DT; 
    gvShowQuestionnaires.DataBind(); 
} 

protected void gvShowQuestionnaires_RowEdit(object sender, GridViewEditEventArgs e) 
{ 
    string id = gvShowQuestionnaires.Rows[e.NewEditIndex].Cells[0].Text; 
    Session["qID"] = id; 
    Response.Redirect("~/members/edit_questionnaire.aspx"); 
} 

protected void showResponses(object sender, EventArgs e) 
{ 
    Button btn = (Button)sender; 
    string id = btn.CommandArgument.ToString(); 
    Session["qID"] = id; 
    Response.Redirect("~/members/questionnaire_responses.aspx");    
} 

किसी भी मदद की बहुत सराहना करेंगे।

उत्तर

10

यह मेरे लिए उचित रूप से स्पष्ट लगता है। यहाँ:

<asp:GridView runat="server" ... OnRowCommand="showResponses"> 

आप showResponses करने के लिए RowCommand घटना बाँध। और यहाँ, showResponses में, आप को लगता है कि इस एक बटन है:

protected void showResponses(object sender, EventArgs e) 
{ 
    Button btn = (Button)sender; 
    string id = btn.CommandArgument.ToString(); 
    Session["qID"] = id; 
    Response.Redirect("~/members/questionnaire_responses.aspx");    
} 

इस एक बटन नहीं है - यह ग्रिड दृश्य है। यदि आप कमांड तर्क चाहते हैं, तो आपको GridViewCommandEventArgs.CommandArgument का उपयोग करना चाहिए।

protected void showResponses(object sender, GridViewCommandEventArgs e) 
{ 
    Session["qID"] = e.CommandArgument; 
    Response.Redirect("~/members/questionnaire_responses.aspx");    
} 
+0

इस उत्तर आदमी – Mubarek

+0

धन्यवाद है। मुझे एक त्रुटि मिल रही है 'शो रेस्पॉन्स' के लिए 'ओवरलोड' लाइन ' 'ऑनक्लिक = "शो रेस्पॉन्स" टेक्स्ट = "परिणाम" />' मैं इसे कैसे हल कर सकता हूं? – HGomez90

+0

@Rupert: मूल रूप से उस घटना के लिए एक अलग हैंडलर का उपयोग करें। आप अच्छी तरह से 'कमांडआर्गमेंट' निकालने के बाद दोनों हैंडलर को एक ही विधि में कॉल करना चाहते हैं। –

0

ग्रिड व्यू में अपने बटन 1 में कमांडनाम विशेषता जोड़ें।

<asp:Button runat="server" ID="button1" CommandName="Button1" CommandArgument='<%# Eval("QuestionnaireID") %>' OnClick="showResponses" text="Results"/> 
showResponses में

फिर ऐसा करने ...

protected void showResponses(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Button1") { 
     Session["qID"] = e.CommandArgument; 
     Response.Redirect("~/members/questionnaire_responses.aspx"); 
    } 
}