2013-02-25 97 views
5

我有创建从三个文本框的阵列下面的两个按钮的单击方法,命令的值,将它们插入到一个数据库中,然后以相同的顺序选择这些值。两个按钮之间的唯一区别是,按升序顺序排列值,而按降序顺序排列其他值。构建按钮点击的方法来避免代码重复

我不习惯用C#的工作。任何人都可以提出构建我的代码的最佳方式,所以我不会为每个按钮重复它吗?通常我会写一个函数并让每个按钮传递它的参数。这是去这里的正确方法吗?

在此先感谢。

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

使用一个函数,从两个不同参数的按钮调用它。 – 2013-02-25 22:01:21

+1

也许提供更多的代码或解释按钮的功能?从你提供的内容来看,我认为带参数的函数调用是最好的,但也可能有其他(更好的)选项。 – Chuck 2013-02-25 22:05:46

回答

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对象发件人使用不足! – 2013-02-25 22:04:48

+0

非常感谢。 :)现在唯一的问题是“‘System.Web.UI.WebControls.Button’不包含关于‘名称’和没有扩展方法‘名称’接受类型“System.Web.UI.WebControls的第一个参数的定义。按钮”可以找到(是否缺少using指令或程序集引用?)” – user1405195 2013-02-25 22:27:54

+0

也许'AccessKey'将instaed工作名称,或任何属性是2个按钮之间唯一 – 2013-02-25 22:38:02

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; 
} 

呼叫排序(“ASC”)创建升序排序列表,和排序(“降序”)以降序排序订购。并没有代码重复:)

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 
}