好的标题可能不清楚,所以让我解释一下。 我有2个班,“Form1”和“webinfo”。
在“webinfo”中我运行以下代码:
class WebInfo
{
string myConnVRM = "Data Source = datascource;" +
"Initial Catalog = catalog;" +
"Persist Security Info=True;" +
"User ID=ID;" +
"Password=PASS;" +
"providerName=System.Data.SqlClient;";
public WebInfo()
{
}
public void GetVRMs(string vRMs, string start, string end, string acc)
{
DataTable vrmTable = new DataTable();
SqlConnection connVRM = new SqlConnection(myConnVRM);
connVRM.Open();
SqlCommand cmdVRM = new SqlCommand("SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(varchar,[Date],101) between @StartDate and @EndDate and [AC]=@Acct", connVRM);
cmdVRM.Parameters.AddWithValue("@acct", acc);
cmdVRM.Parameters.AddWithValue("@from", start);
cmdVRM.Parameters.AddWithValue("@too", end);
SqlDataAdapter vrmAdapter = new SqlDataAdapter(cmdVRM);
vrmAdapter.Fill(vrmTable);
//bind to data grid and display??
}
}
你可以看到我连接到服务器,运行一个查询,最后用结果填充我的表。
我的表单类然后调用GetVRms方法,传递相关信息。
但我需要做的是现在将此表绑定到我的表单上的datagrid,以便我可以显示。唯一的问题是我如何使用这个类中的表?
我完全在想这个吗?它是否像webinfo.vrmtable一样简单?
非常感谢
答案 0 :(得分:2)
这实际上取决于意图。如果这是一个实用工具方法,那么让它返回数据,即
public DataTable GetVRMs(string vRMs, string start, string end, string acc)
{
...
return vrmTable;
}
并以var data = obj.GetVRMs(...)
进行访问。
如果需要保留表格,请将其存储在某处
public DataTable TheTable {get;set;}
public void GetVRMs(string vRMs, string start, string end, string acc)
{
...
TheTable = vrmTable;
}
并访问为:
obj.GetVRMs(..);
var data = obj.TheTable;
注释:
GetVRMs
可能过度缩写DataTable
有效,但很多人会建议类型模型是一个更好的比喻using
语句等以避免问题(最明显的是:使连接池饱和)答案 1 :(得分:2)
你的SQL在这里似乎也错了。
SqlCommand cmdVRM = new SqlCommand("SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(varchar,[Date],101) between @StartDate and @EndDate and [AC]=@Acct", connVRM);
cmdVRM.Parameters.AddWithValue("@acct", acc);
cmdVRM.Parameters.AddWithValue("@StartDate", start);
cmdVRM.Parameters.AddWithValue("@EndDate", end);
OR
string SQL = "SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(datetime,[Date],101) between '"+ start +"' and '"+ end +"' and [AC]=" + acc+ "; ";
SqlCommand cmdVRM = new SqlCommand(SQL, connVRM);
现在您可以按照自己喜欢的方式使用它。
// As DataTable is ref
public void GetVRMs(string vRMs, string start, string end, string acc, DataTable dtVM)
{
if(dtVM == null) throw new Exception("Message");
......
}
OR
public DataTable GetVRMs(string vRMs, string start, string end, string acc)
{
DataTable dtVM=new DataTable();
.......
Return dtVM;
}
答案 2 :(得分:1)
定义一个公共属性vrmtable,并使用WebInfo类的对象从任何地方访问它。
class WebInfo
{
public DataTable vrmTable{get;}
string myConnVRM = "Data Source = datascource;" +
"Initial Catalog = catalog;" +
"Persist Security Info=True;" +
"User ID=ID;" +
"Password=PASS;" +
"providerName=System.Data.SqlClient;";
public WebInfo()
{
}
public void GetVRMs(string vRMs, string start, string end, string acc)
{
SqlConnection connVRM = new SqlConnection(myConnVRM);
vrmTable == new DataTable();
connVRM.Open();
SqlCommand cmdVRM = new SqlCommand("SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(varchar,[Date],101) between @StartDate and @EndDate and [AC]=@Acct", connVRM);
cmdVRM.Parameters.AddWithValue("@acct", acc);
cmdVRM.Parameters.AddWithValue("@from", start);
cmdVRM.Parameters.AddWithValue("@too", end);
SqlDataAdapter vrmAdapter = new SqlDataAdapter(cmdVRM);
vrmAdapter.Fill(vrmTable);
//bind to data grid and display??
}
}
答案 3 :(得分:1)
更改
public void GetVRMs(string vRMs, string start, string end, string acc)
到
public DataTable GetVRMs(string vRMs, string start, string end, string acc)
然后把
return vrmTable;
在方法结束时。
然后像这样绑定到UI中的表:
WebInfo wi = new WebInfo();
DataTable dt = wi.GetVRMs(....);
myDataGridView.DataSource = dt;
myDataGridView.DataBind();
答案 4 :(得分:1)
为什么不直接返回DataTable?
public DataTable GetVRMs(string vRMs, string start, string end, string acc)
{
[...]
return vrmTable;
}
答案 5 :(得分:1)
您可以使用DataTable
而不是void
的返回类型来返回GetVRMs
方法,然后将其分配给vrmTable
,然后将其分配给datagrid的数据源