2013-02-25 75 views
5

मेरे पास निम्नलिखित दो बटन क्लिक विधियां हैं जो तीन टेक्स्टबॉक्स से सरणी बनाते हैं, मानों को ऑर्डर करते हैं, उन्हें डेटाबेस में डालें और फिर उसी क्रम में मानों का चयन करें। दो बटनों के बीच एकमात्र अंतर यह है कि एक मूल्य आरोही क्रम में और दूसरा अवरोही क्रम में आदेश देता है।कोड पुनरावृत्ति से बचने के लिए स्ट्रक्चरिंग बटन क्लिक विधियां

मुझे सी # के साथ काम करने के लिए उपयोग नहीं किया जाता है। क्या कोई मेरे कोड को ढूढ़ने का सबसे अच्छा तरीका सुझा सकता है, इसलिए मैं इसे प्रत्येक बटन के लिए दोहरा नहीं रहा हूं? आम तौर पर मैं एक समारोह लिखता हूं और प्रत्येक बटन इसे तर्क देता है। क्या यह यहां जाने का सही तरीका है?

अग्रिम धन्यवाद।

Button1

protected void Button1_Click(object sender, EventArgs e) 
{ 
    var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text }; 
    var orderedlist = list.OrderBy(x => (x)).ToArray(); 

...

SqlCommand cmd = new SqlCommand("Select * from lists order by values asc", conn); 

Button2

protected void Button2_Click(object sender, EventArgs e) 
{ 
    var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text }; 
    var orderedlist = list.OrderByDescending(x => (x)).ToArray(); 

...

SqlCommand cmd = new SqlCommand("Select * from lists order by values desc", conn); 
+2

फ़ंक्शन का उपयोग करें, इसे विभिन्न तर्कों के साथ दोनों बटनों से कॉल करें। –

+1

शायद थोड़ा और कोड या बटन क्या कर रहे हैं इसका स्पष्टीकरण प्रदान करते हैं? आपके द्वारा प्रदान किए गए कार्यों से मुझे लगता है कि तर्क के साथ एक फ़ंक्शन कॉल सबसे अच्छा होगा लेकिन अन्य (बेहतर) विकल्प भी हो सकते हैं। – Chuck

उत्तर

5

आप केवल Button दोनों को एक ही हैंडलर पर ईवेंट क्लिक कर सकते हैं और sender का उपयोग कर सकते हैं कि आप किस प्रकार की सॉर्टिंग चाहते हैं।

protected void Button_Click(object sender, EventArgs e) 
{ 
    var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text }; 
    var orderedlist = (sender as Button).AccessKey == "Button1" // or whatever name it is 
         ? list.OrderByDescending(x => (x)).ToArray() 
         : list.OrderBy(x => (x)).ToArray(); 

    ............. 
} 
+0

+1 ऑब्जेक्ट प्रेषक पर्याप्त उपयोग नहीं किया जाता है! –

+0

बहुत बहुत धन्यवाद। :) अब एकमात्र समस्या है "'System.Web.UI.WebControls.Button' में 'नाम' की परिभाषा नहीं है और कोई 'सिस्टम' प्रकार 'सिस्टम' प्रकार के पहले तर्क को स्वीकार नहीं करता है 'System.Web.UI.WebControls। बटन 'पाया जा सकता है (क्या आप एक प्रयोग निर्देश या असेंबली संदर्भ खो रहे हैं?) " – user1405195

+0

शायद' एक्सेसकी 'नाम के इंस्टॉलेशन का काम करेगा, या 2 बटन के बीच जो भी संपत्ति अद्वितीय है –

2

विकल्प पर तरह एक समारोह बनाने के लिए, होगा:

public list sort(String order) 
{ 
    var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text }; 
    var orderedlist = list.OrderByDescending(x => (x)).ToArray(); 
    ... 

    SqlCommand cmd = new SqlCommand("Select * from lists order by values " + order, conn) 
    ... 
    return SortedList; 
} 

कॉल प्रकार ("एएससी") आरोही क्रम में सॉर्ट सूची बनाने के लिए, और प्रकार ("desc") अवरोही क्रम में सॉर्ट करने के लिए आदेश। और कोई कोड पुनरावृत्ति :)

0

आप मूल रूप से यहां कार्यात्मक प्रोग्रामिंग का उपयोग कर सकते हैं। किसी फ़ंक्शन में परिवर्तित होने वाले कोड का सार सार करें।

protected void Button1_Click(object sender, EventArgs e) 
{ 
    HelperFunction(list => list.OrderBy(x => x)); 
} 

protected void Button2_Click(object sender, EventArgs e) 
{ 
    HelperFunction(list => list.OrderByDescending(x => x)); 
} 

private void HelperFunction(Func<IEnumerable<string>, <IEnumerable<string>> listOrderer) 
{ 
    var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text }; 

    var orderedList = listOrderer(list).ToArray(); 

    // rest of code 
}