客户提的刁难问题关于datagrid的
要求有一个按纽,按了后datagrid所有的记录的可编辑列变成编辑模式,就是变成textbox,然后再一个按纽全部更新.
注意:不是那种用增加个编辑列就可以搞定的,因为要一个按纽就可经编辑所有记录,而编辑列是一条一条的编辑.
自己想的解决方案,用绑定列,字符串格式为<input type="text" value="{0}">,可是这样的结果是无法获取文本域里面的值,因为datagrid1.items[i].cell[0].text里面只会显示其原先的值,而不是你输入的值.
十分郁闷,大家一起想想
问题点数:20、回复次数:43Top
1 楼zb219(找奔)回复于 2006-03-03 08:32:31 得分 0
这个问题很有价值,因为有时客户会因为要逐条编辑而觉麻烦,他们希望一次编辑多条记录.各位同仁一定要看看啊Top
2 楼cansum396(漆黑的夜)回复于 2006-03-03 08:36:05 得分 0
全部用模板列
然后在保存的时候循环整个datagrid
Top
3 楼califord(远方)回复于 2006-03-03 08:36:07 得分 0
做一个模板列给他,一点全部可编辑,就是用循环, 然后点确定后就是更新数据库,也是循环Top
4 楼lohoo(水喻舟)回复于 2006-03-03 08:43:00 得分 0
做模板列,或者自己继续一下datagrid,自己添加相应的功能.Top
5 楼zb219(找奔)回复于 2006-03-03 08:43:48 得分 0
一点全部可编辑,就是用循环
这一点怎么做Top
6 楼newcomer0()回复于 2006-03-03 08:57:22 得分 0
这个也是问题吗?
用绑定列,字符串格式为<input type="text" value="{0}">,可是这样的结果是无法获取文本域里面的值,因为datagrid1.items[i].cell[0].text里面只会显示其原先的值,而不是你输入的值.
---------datagrid1.items[i].cell[0].text本来就是原先的值.
从你的<input type="text" value="{0}">里找答案.
模板列+循环应该可以解决你的问题.Top
7 楼elivehai(一切皆有可能)回复于 2006-03-03 09:00:45 得分 0
html代码:
<HTML>
<HEAD>
<title>mupgrid</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:DataGrid ID="mygrid" Runat="server" AutoGenerateColumns="False" DataKeyField="Employeeid"
Font-Size="9pt" HeaderStyle-BackColor="darkred" HeaderStyle-ForeColor="white" BackColor="white"
BorderColor="black">
<AlternatingItemStyle BackColor="#ececec"></AlternatingItemStyle>
<Columns>
<asp:TemplateColumn>
<HeaderTemplate>
<asp:CheckBox ID="chekall" Runat="server" onclick="javascript: return select_deselectAll(this.checked,this.id);"></asp:CheckBox><font face="Webdings">a</font>
</HeaderTemplate>
<ItemTemplate>
<input type="hidden" id="selectid" name="selectid" runat="server" value='<%# Container.ItemIndex%>'>
<asp:CheckBox ID="chkbox" Runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="employeeid" HeaderText="EmployeeID"></asp:BoundColumn>
<asp:TemplateColumn>
<HeaderTemplate>
FirstName
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lab_firname" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"firstname")%>'>
</asp:Label>
<asp:TextBox ID="txt_firname" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"firstname")%>' Visible="False">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="LastName">
<ItemTemplate>
<asp:Label ID="lab_lastname" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"lastname")%>'>
</asp:Label>
<asp:TextBox ID="txt_lastname" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"lastname")%>' Visible="False">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<asp:Button ID="edit" Runat="server" Text="Edit"></asp:Button>
<asp:Button ID="update" Runat="server" Text="Update"></asp:Button>
<asp:Button ID="del" Runat="server" Text="DelItems"></asp:Button>
</form>
</body>
</HTML>Top
8 楼elivehai(一切皆有可能)回复于 2006-03-03 09:01:08 得分 0
c#代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace mydatagrid
{
/// <summary>
/// mupgrid 的摘要说明。
/// </summary>
public class mupgrid : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button edit;
protected System.Web.UI.WebControls.Button update;
protected System.Web.UI.WebControls.DataGrid mygrid;
protected System.Web.UI.WebControls.Button del;
private SqlConnection conn = new SqlConnection("server=(local);uid=sa;pwd=w;database=northwind;");
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string jsScript = "<script language=JavaScript> \n" +
"<!--\n" +
"function confirmDelete (frm) {\n\n" +
" // loop through all elements\n" +
" for (i=0; i<frm.length; i++) {\n\n" +
" // Look for our checkboxes only\n" +
" if (frm.elements[i].name.indexOf ('chkbox') !=-1) {\n" +
" // If any are checked then confirm alert, otherwise nothing happens\n" +
" if(frm.elements[i].checked) {\n" +
" return confirm ('确认要更新记录吗?')\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n\n\n" +
"function select_deselectAll (chkVal, idVal) {\n" +
"var frm = document.forms[0];\n" +
"// loop through all elements\n" +
" for (i=0; i<frm.length; i++) {\n" +
" // // Look for our Header Template's Checkbox\n" +
" if (idVal.indexOf ('chekall') != -1) {\n" +
" // Check if main checkbox is checked, then select or deselect datagrid checkboxes \n" +
" if(chkVal == true) {\n" +
" frm.elements[i].checked = true;\n" +
" } else {\n" +
" frm.elements[i].checked = false;\n" +
" }\n" +
" // Work here with the Item Template's multiple checkboxes\n" +
" } else if (idVal.indexOf('chkbox') != -1) {\n" +
" // Check if any of the checkboxes are not checked, and then uncheck top select all checkbox\n" +
" if(frm.elements[i].checked == false) {\n" +
" frm.elements[1].checked = false; // Check if any of the checkboxes are not checked, and then uncheck top select all checkbox\n" +
" }\n" +
" }\n" +
" }\n" +
"}" +
"//--> \n" +
"</script>";
RegisterClientScriptBlock("clientScript",jsScript);
WebControl edit = (WebControl)Page.FindControl("update");
edit.Attributes.Add("onclick","return confirmDelete(this.form);");
if(!IsPostBack)
{
setbind();
}
}
private void setbind()
{
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter("select employeeid,firstname,lastname from employees",conn);
DataSet ds = new DataSet();
sda.Fill(ds);
mygrid.DataSource = ds.Tables[0].DefaultView;
mygrid.DataBind();
ds.Clear();
sda.Dispose();
conn.Close();
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.edit.Click += new System.EventHandler(this.edit_Click);
this.update.Click += new System.EventHandler(this.update_Click);
this.del.Click += new System.EventHandler(this.del_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void edit_Click(object sender, System.EventArgs e)
{
foreach(DataGridItem i in mygrid.Items)
{
if(((CheckBox)i.FindControl("chkbox")).Checked == true)
{
((TextBox)i.FindControl("txt_firname")).Visible = true;
((TextBox)i.FindControl("txt_lastname")).Visible = true;
((Label)i.FindControl("lab_firname")).Visible = false;
((Label)i.FindControl("lab_lastname")).Visible = false;
i.BackColor = System.Drawing.Color.LightGreen;
}
}
}
private void update_Click(object sender, System.EventArgs e)
{
foreach(DataGridItem i in mygrid.Items)
{
if(((CheckBox)i.FindControl("chkbox")).Checked == true)
{
if(((TextBox)i.FindControl("txt_firname")).Text != ((Label)i.FindControl("lab_firname")).Text || ((TextBox)i.FindControl("txt_lastname")).Text != ((Label)i.FindControl("lab_lastname")).Text)
{
try
{
conn.Open();
string sql = "update employees set firstname='"+(((TextBox)i.FindControl("txt_firname")).Text).ToString()+"',lastname='"+(((TextBox)i.FindControl("txt_lastname")).Text).ToString()+"' where employeeid = " + i.Cells[1].Text.ToString();
SqlCommand cmd = new SqlCommand(sql,conn);
cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
Response.Write(ex);
}
finally
{
conn.Close();
}
//Response.Write("记录号:"+ this.mygrid.DataKeys[int.Parse(((HtmlInputHidden)i.FindControl("selectid")).Value)] + "FirstName:" + ((TextBox)i.FindControl("txt_firname")).Text + "LastName:" + ((TextBox)i.FindControl("txt_lastname")).Text + "<br>");
}
((TextBox)i.FindControl("txt_firname")).Visible = false;
((TextBox)i.FindControl("txt_lastname")).Visible = false;
((Label)i.FindControl("lab_firname")).Visible = true;
((Label)i.FindControl("lab_lastname")).Visible = true;
((CheckBox)i.FindControl("chkbox")).Checked = false;
}
}
setbind();
}
private void del_Click(object sender, System.EventArgs e)
{
string ids = "";
bool flag = false;
foreach(DataGridItem i in mygrid.Items)
{
if(((CheckBox)i.FindControl("chkbox")).Checked)
{
flag = true;
ids += i.Cells[1].Text.ToString() + ",";
}
}
if(flag == true)
{
string sql = "delete from employees where employeeid in(" + ids.Substring(0,ids.LastIndexOf(",")) +")";
try
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql,conn);
cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
Response.Write(ex);
}
finally
{
conn.Close();
setbind();
}
}
}
}
}Top
9 楼elivehai(一切皆有可能)回复于 2006-03-03 09:01:59 得分 20
上面的我实验过了,完全可以的,就是麻烦了点哦。呵呵。Top
10 楼LV_Q(AES)回复于 2006-03-03 09:03:02 得分 0
好问题Top
11 楼zb219(找奔)回复于 2006-03-03 09:08:54 得分 0
因为我只能写<input type="text" value="{0}">
我总不能写<input type="text" value="{0}" runat=server>
或
<input type="text" value="{0}" name="{0}">
吧
Top
12 楼zb219(找奔)回复于 2006-03-03 09:14:47 得分 0
关键是如果用模板列,那在页面加载的时候也是编辑模式,我要在页面加载的时候是非编辑模式,按了按钮后变为编辑模式Top
13 楼crazy2005(剣心)回复于 2006-03-03 09:28:18 得分 0
为什么一定要用客户端的?Top
14 楼zb219(找奔)回复于 2006-03-03 09:34:33 得分 0
知道了,elivehai(wzh)提出的方案是在模板例里放了两个控件,一个是label,一个是textbox,后面默认为不显示.Top
15 楼crazy2005(剣心)回复于 2006-03-03 09:53:49 得分 0
你也可以用样式表来控制textbox的表示形式!那样只用textbox也可以实现你的目的Top
16 楼zzfloat(方舟)回复于 2006-03-03 10:43:50 得分 0
自己想的解决方案,用绑定列,字符串格式为<input type="text" value="{0}">,可是这样的结果是无法获取文本域里面的值,因为datagrid1.items[i].cell[0].text里面只会显示其原先的值,而不是你输入的值.
其实用Request是可以取到值的
<input type="text" value="{0}"> 改成
<input type="text" name="myInput" value="{0}">
string values=Request["myInput"];
string[] inputs=values.Split(',');
第i行的输入值对应inputs[i];Top
17 楼zb219(找奔)回复于 2006-03-03 11:36:25 得分 0
crazy2005(剣心)的方法也不错
zzfloat(方舟)
<input type="text" value="{0}"> 改成
<input type="text" name="myInput" value="{0}">
string values=Request["myInput"];
string[] inputs=values.Split(',');
这种方法其实是行不通的
采用了elivehai(wzh) 的方法,
现在给分
不过大家可以想想有没有更好的方法Top
18 楼zb219(找奔)回复于 2006-03-03 11:39:06 得分 0
算了,为了完美,还是等等,明天结帐Top
19 楼daishengs(横舟摆渡)回复于 2006-03-03 11:50:46 得分 0
如果你想即简单又美观就到网上下个第三方的DataGrid控件吧,它是支持整表编辑模式的,还可能拖拉列。Top
20 楼idda(碗掉了,头大个疤)回复于 2006-03-03 11:55:43 得分 0
用模板列,给个command标志,在itemcomand事件里面判断,循环代码量不大Top
21 楼diablo1003(小叶)回复于 2006-03-03 12:10:13 得分 0
用循环判断咯,使用C1的Grid,这个还是非常的不错的。Top
22 楼zb219(找奔)回复于 2006-03-03 15:30:29 得分 0
用模板列,给个command标志,在itemcomand事件里面判断,循环代码量不大
能否详尽Top
23 楼jun1111(狼性亦飄零...)回复于 2006-03-03 15:51:48 得分 0
用第三方控件是最好的。
Top
24 楼zb219(找奔)回复于 2006-03-03 16:06:31 得分 0
那介绍一下第三方控件Top
25 楼superhasty(鸟儿自空中飞过)回复于 2006-03-03 16:21:15 得分 0
看一下.Top
26 楼cattleknife(解牛刀)回复于 2006-03-04 04:55:12 得分 0
不用这么复杂吧,做个隐藏列,再做两个按钮,按编辑呢,把隐藏列打开。
如果要编辑的列太多,索性做两个TABLE,一个管显示,一个管编辑,一按更新就切换。Top
27 楼hjh1982(能说不是错)回复于 2006-03-04 08:22:00 得分 0
呵呵,关注!Top
28 楼kevin521(蓝电飞雪)回复于 2006-03-04 08:28:38 得分 0
收藏。Top
29 楼jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程。和气生财。共同提高。共同进步!)回复于 2006-03-04 09:01:12 得分 0
=================== 注意了 最佳解决方案!! =============================
做两个DataGrid 一个浏览用,一个编辑用。
浏览用的正常的方式,编辑用的(加模版列)把TextBox“上移一行”,就是把Label换成TextBox,不知道我说明白了没有。
单击按钮,切换两个DataGrid的显示。
Top
30 楼accpbenson(叮噹大雄☆☆☆☆☆)回复于 2006-03-04 09:06:51 得分 0
c#代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace mydatagrid
{
/// <summary>
/// mupgrid 的摘要说明。
/// </summary>
public class mupgrid : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button edit;
protected System.Web.UI.WebControls.Button update;
protected System.Web.UI.WebControls.DataGrid mygrid;
protected System.Web.UI.WebControls.Button del;
private SqlConnection conn = new SqlConnection("server=(local);uid=sa;pwd=w;database=northwind;");
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string jsScript = "<script language=JavaScript> \n" +
"<!--\n" +
"function confirmDelete (frm) {\n\n" +
" // loop through all elements\n" +
" for (i=0; i<frm.length; i++) {\n\n" +
" // Look for our checkboxes only\n" +
" if (frm.elements[i].name.indexOf ('chkbox') !=-1) {\n" +
" // If any are checked then confirm alert, otherwise nothing happens\n" +
" if(frm.elements[i].checked) {\n" +
" return confirm ('确认要更新记录吗?')\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n\n\n" +
"function select_deselectAll (chkVal, idVal) {\n" +
"var frm = document.forms[0];\n" +
"// loop through all elements\n" +
" for (i=0; i<frm.length; i++) {\n" +
" // // Look for our Header Template's Checkbox\n" +
" if (idVal.indexOf ('chekall') != -1) {\n" +
" // Check if main checkbox is checked, then select or deselect datagrid checkboxes \n" +
" if(chkVal == true) {\n" +
" frm.elements[i].checked = true;\n" +
" } else {\n" +
" frm.elements[i].checked = false;\n" +
" }\n" +
" // Work here with the Item Template's multiple checkboxes\n" +
" } else if (idVal.indexOf('chkbox') != -1) {\n" +
" // Check if any of the checkboxes are not checked, and then uncheck top select all checkbox\n" +
" if(frm.elements[i].checked == false) {\n" +
" frm.elements[1].checked = false; // Check if any of the checkboxes are not checked, and then uncheck top select all checkbox\n" +
" }\n" +
" }\n" +
" }\n" +
"}" +
"//--> \n" +
"</script>";
RegisterClientScriptBlock("clientScript",jsScript);
WebControl edit = (WebControl)Page.FindControl("update");
edit.Attributes.Add("onclick","return confirmDelete(this.form);");
if(!IsPostBack)
{
setbind();
}
}
private void setbind()
{
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter("select employeeid,firstname,lastname from employees",conn);
DataSet ds = new DataSet();
sda.Fill(ds);
mygrid.DataSource = ds.Tables[0].DefaultView;
mygrid.DataBind();
ds.Clear();
sda.Dispose();
conn.Close();
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.edit.Click += new System.EventHandler(this.edit_Click);
this.update.Click += new System.EventHandler(this.update_Click);
this.del.Click += new System.EventHandler(this.del_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void edit_Click(object sender, System.EventArgs e)
{
foreach(DataGridItem i in mygrid.Items)
{
if(((CheckBox)i.FindControl("chkbox")).Checked == true)
{
((TextBox)i.FindControl("txt_firname")).Visible = true;
((TextBox)i.FindControl("txt_lastname")).Visible = true;
((Label)i.FindControl("lab_firname")).Visible = false;
((Label)i.FindControl("lab_lastname")).Visible = false;
i.BackColor = System.Drawing.Color.LightGreen;
}
}
}
private void update_Click(object sender, System.EventArgs e)
{
foreach(DataGridItem i in mygrid.Items)
{
if(((CheckBox)i.FindControl("chkbox")).Checked == true)
{
if(((TextBox)i.FindControl("txt_firname")).Text != ((Label)i.FindControl("lab_firname")).Text || ((TextBox)i.FindControl("txt_lastname")).Text != ((Label)i.FindControl("lab_lastname")).Text)
{
try
{
conn.Open();
string sql = "update employees set firstname='"+(((TextBox)i.FindControl("txt_firname")).Text).ToString()+"',lastname='"+(((TextBox)i.FindControl("txt_lastname")).Text).ToString()+"' where employeeid = " + i.Cells[1].Text.ToString();
SqlCommand cmd = new SqlCommand(sql,conn);
cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
Response.Write(ex);
}
finally
{
conn.Close();
}
//Response.Write("记录号:"+ this.mygrid.DataKeys[int.Parse(((HtmlInputHidden)i.FindControl("selectid")).Value)] + "FirstName:" + ((TextBox)i.FindControl("txt_firname")).Text + "LastName:" + ((TextBox)i.FindControl("txt_lastname")).Text + "<br>");
}
((TextBox)i.FindControl("txt_firname")).Visible = false;
((TextBox)i.FindControl("txt_lastname")).Visible = false;
((Label)i.FindControl("lab_firname")).Visible = true;
((Label)i.FindControl("lab_lastname")).Visible = true;
((CheckBox)i.FindControl("chkbox")).Checked = false;
}
}
setbind();
}
private void del_Click(object sender, System.EventArgs e)
{
string ids = "";
bool flag = false;
foreach(DataGridItem i in mygrid.Items)
{
if(((CheckBox)i.FindControl("chkbox")).Checked)
{
flag = true;
ids += i.Cells[1].Text.ToString() + ",";
}
}
if(flag == true)
{
string sql = "delete from employees where employeeid in(" + ids.Substring(0,ids.LastIndexOf(",")) +")";
try
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql,conn);
cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
Response.Write(ex);
}
finally
{
conn.Close();
setbind();
}
}
}
}
}
Top
31 楼gaohaidong(高海东)回复于 2006-03-04 10:20:59 得分 0
这个是有点麻烦Top
32 楼tudou614(魔蟹座的SATAN)回复于 2006-03-04 10:21:15 得分 0
MKTop
33 楼jeffy2100(永远的我)回复于 2006-03-04 10:48:52 得分 0
jyk(喜欢编程。和气生财。共同提高。共同进步)的方案:
做两个DataGrid 一个浏览用,一个编辑用。
浏览用的正常的方式,编辑用的(加模版列)把TextBox“上移一行”,就是把Label换成TextBox,不知道我说明白了没有。
单击按钮,切换两个DataGrid的显示。
这样也行吧。不过好像复杂点,呵呵Top
34 楼boy_north(北方的豹子)回复于 2006-03-04 11:17:50 得分 0
还是有高人的!
强!Top
35 楼epbon(没有)回复于 2006-03-04 18:07:21 得分 0
我们公司是结合ajax,.net重新开发了一个平台,不过投入较大Top
36 楼sdwf(学习.NET中)回复于 2006-03-04 21:39:39 得分 0
http://blogs.msdn.com/mattdotson/archive/2005/11/09/491096.aspxTop
37 楼dsclub(任搏软)回复于 2006-03-04 23:12:49 得分 0
值得学习Top
38 楼feibinger(冰山之封)回复于 2006-03-04 23:57:01 得分 0
收藏Top
39 楼sunick1984(阳光)回复于 2006-03-05 03:09:17 得分 0
偶是菜鸟没看懂
Top
40 楼wanhuibing(顽石)回复于 2006-03-05 09:12:21 得分 0
收藏。Top
41 楼WeekZero(∮小气的鬼∮)回复于 2006-03-05 09:49:51 得分 0
使用循环也有问题,循环更新时不可以一条一条的来
得使用事务来处理,要么在sql语句中使用事务,要么在程序中使用事务Top
42 楼zb219(找奔)回复于 2006-03-08 13:31:44 得分 0
编辑用的(加模版列)把TextBox“上移一行”,就是把Label换成TextBox,不知道我说明白了没有。
没看明白
Top
43 楼lizzy63(燕子)回复于 2006-03-09 10:34:54 得分 0
在winfom中怎么用啊,Top




