2010-03-05 14 views
20

में बटन के कमांड आर्ग्यूमेंट के माध्यम से एकाधिक तर्क पास करना मेरे पास एकाधिक पंक्तियों के साथ ग्रिडव्यू है, प्रत्येक में अपडेट बटन है और जब कोई अपडेट बटन पर क्लिक करता है तो मुझे 2 मानों को पारित करने की आवश्यकता होती है। कमांडअर्गमेंट के अंदर तर्कों को पैक करने के अलावा अल्पविराम (पुरातन और सुरुचिपूर्ण नहीं) से अलग, मैं एक से अधिक तर्क कैसे पारित करूंगा?Asp.net

<asp:LinkButton ID="UpdateButton" runat="server" CommandName="UpdateRow" CommandArgument="arg_value" Text="Update and Insert" OnCommand="CommandButton_Click" ></asp:LinkButton> 

एक नोट के रूप में, मूल्यों पृष्ठ पर किसी भी नियंत्रण से लिया गया नहीं किया जा सकता, इसलिए किसी भी डिजाइन समाधान नहीं करते हैं। कृपया पूछे गए प्रश्न पर ध्यान दें। अग्रिम में धन्यवाद।

+7

एक डेलीमीटर का उपयोग करने का 'पुरातन' समाधान कभी-कभी सबसे आसान होता है। – Kelsey

+0

@ सरसनेक - मैं अर्चना मोटागी के उत्तर – fubo

उत्तर

13

इसके चारों ओर घूमने के बाद केल्सी सही दिखता है।

बस एक कॉमा या कुछ का उपयोग करें और जब आप इसे उपभोग करना चाहते हैं तो इसे विभाजित करें।

+4

को स्वीकार करता हूं: http://aspdotnetcodebook.blogspot.com/2008/09/how-to-pass-multiple-values-to.html – sarsnake

1

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

70

आप अर्धविराम से अलग मूल्यों को कमांड तर्क के रूप में पास कर सकते हैं और फिर स्ट्रिंग को विभाजित कर सकते हैं और इसका उपयोग कर सकते हैं।

<asp:TemplateField ShowHeader="false"> 
    <ItemTemplate> 
     <asp:LinkButton ID="lnkCustomize" Text="Customize" CommandName="Customize" CommandArgument='<%#Eval("IdTemplate") + ";" +Eval("EntityId")%>' runat="server"> 
     </asp:LinkButton> 
    </ItemTemplate> 
</asp:TemplateField> 

सर्वर साइड पर

protected void gridview_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
     string[] arg = new string[2]; 
     arg = e.CommandArgument.ToString().Split(';'); 
     Session["IdTemplate"] = arg[0]; 
     Session["IdEntity"] = arg[1]; 
     Response.Redirect("Samplepage.aspx"); 
} 

आशा है कि यह मदद करता है !!!!

+0

उपर्युक्त मेरे लिए काम करता है। केवल समस्या यह है कि आप रीडायरेक्ट() एएसपीएक्स लिंक में पैरामीटर खो रहे हैं। Response.Redirect ("Samplepage.aspx? IdTemplate =" + सत्र ["IdTemplate"]। ToString()। ट्रिम() + "और IdEntity =" + सत्र ["IdEntity"]। ToString()। ट्रिम()); – Fandango68

+0

एक पेडेंट होने के नाते आपको टॉस्ट्रिंग() की आवश्यकता नहीं है। कमांडअर्गमेंट हमेशा एक स्ट्रिंग है, इसलिए: var argument = ((लिंकबटन) प्रेषक) .CommandArgument.Split (';'); –

2

ही ऊपर टिप्पणी करने के लिए पर जोड़ने ऐसा करने का एक छोटे से अधिक सुरुचिपूर्ण तरीका ..

<asp:GridView ID="grdParent" runat="server" BackColor="White" BorderColor="#DEDFDE" 
          AutoGenerateColumns="false" 
          OnRowDeleting="deleteRow" 
         GridLines="Vertical"> 
     <asp:BoundField DataField="IdTemplate" HeaderText="IdTemplate" /> 
     <asp:BoundField DataField="EntityId" HeaderText="EntityId" /> 
    <asp:TemplateField ShowHeader="false"> 
     <ItemTemplate> 
      <asp:LinkButton ID="lnkCustomize" Text="Delete" CommandName="Delete" CommandArgument='<%#Eval("IdTemplate") + ";" +Eval("EntityId")%>' runat="server"> 
      </asp:LinkButton> 
     </ItemTemplate> 
    </asp:TemplateField> 
    </asp:GridView> 

और सर्वर साइड पर:

protected void deleteRow(object sender, GridViewDeleteEventArgs e) 
{ 
    string IdTemplate= e.Values["IdTemplate"].ToString(); 
    string EntityId = e.Values["EntityId"].ToString(); 

    // Do stuff.. 
} 
+0

यह केवल तभी काम करता है जब आप अपने ग्रिड में प्रदर्शित IdTemplate और EntityId फ़ील्ड चाहते हैं। कमांडआर्गमेंट में आपके द्वारा रखे गए मान वास्तव में कभी भी उपयोग नहीं किए जाते हैं। – cyberspy

5

मेरे दृष्टिकोण को जोड़ने के लिए गुण संग्रह उपयोग कर रहा है एचटीएमएल डेटा- पीछे कोड से गुण। यह jquery और क्लाइंट साइड स्क्रिप्टिंग के साथ अधिक इनलाइन है।

// This would likely be done with findControl in your grid OnItemCreated handler 
LinkButton targetBtn = new LinkButton(); 


// Add attributes 
targetBtn.Attributes.Add("data-{your data name here}", value.ToString()); 
targetBtn.Attributes.Add("data-{your data name 2 here}", value2.ToString()); 

तो विशेषता संग्रह

string val = targetBtn.Attributes["data-{your data name here}"].ToString(); 
11

@ पैट्रिक जवाब एक अच्छा विचार है, और अधिक श्रेय के माध्यम से मूल्यों को पुनः प्राप्त !. आप जितनी चाहें उतनी डेटा आइटम प्राप्त कर सकते हैं, वे सभी अलग हो गए हैं, और यदि आवश्यक हो तो क्लाइंट पक्ष का उपयोग किया जा सकता है।

उन्हें कोड के बजाय घोषणात्मक रूप से भी जोड़ा जा सकता है। मैं सिर्फ इस तरह एक GridView के लिए ऐसा किया:

<asp:TemplateField HeaderText="Remind"> 
    <ItemTemplate> 
    <asp:ImageButton ID="btnEmail" 
     data-rider-name="<%# ((Result)((GridViewRow) Container).DataItem).Rider %>" 
     data-rider-email="<%# ((Result)((GridViewRow) Container).DataItem).RiderEmail %>" 
     CommandName="Email" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/images/email.gif" /> 
    </ItemTemplate> 
</asp:TemplateField> 

RowCommand में, आप ऐसा करते हैं:

इतना सीमांकक के साथ एक साथ सभी मूल्यों हैकिंग और अंत में फिर से खोल से क्लीनर।

यदि आप इससे छेड़छाड़ किए गए हैं, तो पृष्ठ से वापस आने वाले किसी भी डेटा का परीक्षण/साफ करना न भूलें!

+1

मुझे इस दृष्टिकोण को पसंद है, यह उतना ही करीब है जितना आप वस्तुओं को दृढ़ता से टाइप कर सकते हैं, कॉमा का उपयोग करके और इस तरह की जानकारी को अलग करने के लिए सबस्ट्रिंग कर सकते हैं, हालांकि व्यावहारिक, एक गड़बड़ हो सकती है। "डेटा-" कंटेनर का उपयोग करके तर्क के प्रत्येक भाग के बारे में आपको निहित ज्ञान होना चाहिए और कोड को और अधिक पठनीय बनाता है। – GJKH

0

आप दो मानों पास करना चाहते हैं, तो आप इस दृष्टिकोण

<asp:LinkButton ID="RemoveFroRole" Text="Remove From Role" runat="server" 
CommandName='<%# Eval("UserName") %>' CommandArgument='<%# Eval("RoleName") %>' 
OnClick="RemoveFromRole_Click" /> 

मूल रूप से मैं {CommmandName, CommandArgument} इलाज कर रहा हूँ कुंजी मान के रूप में उपयोग कर सकते हैं। डेटाबेस फ़ील्ड से दोनों सेट करें। आपको ऑनक्लिक ईवेंट का उपयोग करना होगा और इस मामले में OnCommand ईवेंट का उपयोग करना होगा, जो मुझे लगता है कि अधिक स्वच्छ कोड है।