我在C#(MS VS2008)中做了一个基本的事情,并且对特定代码的设计提出了更多问题.
我正在创建一个数据表,然后尝试从datareader(基于SQL存储过程)加载数据表.我想知道的是,加载数据表的最有效方法是执行while语句,还是有更好的方法.
对我来说唯一的缺点是我必须在我的while语句中手动输入我要添加的字段,但我也不知道自动化的方法,因为我不希望SP中的所有字段只选择一个,但这在我眼里并不是什么大不了的事.
我已经将代码片段包含在我所做的全部内容之下,但对我而言,代码本身并不显着甚至我所询问的内容.莫思想知道我的方法论,如果我的策略错误/效率低下,我会在以后修改代码帮助.
var dtWriteoffUpload = new DataTable();
dtWriteoffUpload.Columns.Add("Unit");
dtWriteoffUpload.Columns.Add("Year");
dtWriteoffUpload.Columns.Add("Period");
dtWriteoffUpload.Columns.Add("Acct");
dtWriteoffUpload.Columns.Add("Descr");
dtWriteoffUpload.Columns.Add("DEFERRAL_TYPE");
dtWriteoffUpload.Columns.Add("NDC_Indicator");
dtWriteoffUpload.Columns.Add("Mgmt Cd");
dtWriteoffUpload.Columns.Add("Prod");
dtWriteoffUpload.Columns.Add("Node");
dtWriteoffUpload.Columns.Add("Curve_Family");
dtWriteoffUpload.Columns.Add("Sum Amount");
dtWriteoffUpload.Columns.Add("Base Curr");
dtWriteoffUpload.Columns.Add("Ledger");
cmd = util.SqlConn.CreateCommand();
cmd.CommandTimeout = 1000;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "proc_writeoff_data_details";
cmd.Parameters.Add("@whoAmI", SqlDbType.VarChar).Value =
WindowsIdentity.GetCurrent().Name;
cmd.Parameters.Add("@parmEndDateKey", SqlDbType.VarChar).Value = myMostRecentActualDate;
cmd.Parameters.Add("@countrykeys", SqlDbType.VarChar).Value = myCountryKey;
cmd.Parameters.Add("@nodekeys", SqlDbType.VarChar).Value = "1,2";
break;
dr = cmd.ExecuteReader();
while (dr.Read())
{
dtWriteoffUpload.Rows.Add(dr["country name"].ToString(), dr["country key"].ToString());
}
Run Code Online (Sandbox Code Playgroud) 我正在使用C#,我正在创建一个名为"importControlKeys"的ArrayList,它可以很好地创建.但是,我无法为我的生活找到一种方法来遍历arrayList并选择ArrayList中的值以便在以后的代码中使用.
我知道我遗漏了一些简单的东西,但是从ArrayList中提取值的语法是什么.我希望它在某些情况下像我的代码中的importControlKeys [ii] .value,但这不起作用.
我在这些电路板上搜索过,找不到确切的解决方案,但我确信它很容易.msot的解决方案说重写为List但我不得不相信有一种方法可以从数组列表中获取数据而无需重新编写为List
private void button1_Click(object sender, EventArgs e)
{
ArrayList importKeyList = new ArrayList();
List<DataGridViewRow> rows_with_checked_column = new List<DataGridViewRow>();
foreach (DataGridViewRow row in grd1.Rows)
{
if (Convert.ToBoolean(row.Cells[Del2.Name].Value) == true)
{
rows_with_checked_column.Add(row);
importKeyList.Add(row.Cells[colImportControlKey.Name].Value);
//string importKey = grd1.Rows[grd1.SelectedCells[0].RowIndex].Cells[0].Value.ToString();
//grd1.ClearSelection();
//if (DeleteImport(importKey))
// LoadGrid();
}
}
for (int ii = 0; ii < rows_with_checked_column.Count; ii++)
{
//grd1.ClearSelection();
string importKey = importKeyList[ii].value; //ERRORS OUT
if (DeleteImport(importKey))
LoadGrid();
// Do what you want with the check rows
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个超过300个用户的列表,我想将其添加到SSRS Security作为"浏览器".我想知道,有没有办法以编程方式执行此操作而不是为每个用户执行新角色分配?
我在VS2008环境中使用C#.
我有一个名为frmStrategy5YrPlan的表单,其中包含一个数据网格视图,用于填充数据,然后允许用户键入新的预测数据.完成后,用户将单击一个按钮上传他们输入的新数据,我希望显示另一个表单,要求他们确认是否要这样做(因为该过程会删除所有旧数据并替换为'我进入了).
我总是被表单欺骗,但基本上我希望我的初始表单加载第二个表单,评估用户是否选择确认加载数据(或不加载),然后使用初始表单中的代码处理数据.
这是我的初始形式,今天工作正常而没有调用第二种形式(我正在询问).下面是初学者的第二种形式的代码和我添加的按钮的工作方式,只是试图让两种形式相互交流.在另一部分中调用表单时,总是让我感到困惑.我对MDIParents不太熟悉,但是我在这里尝试过,我的初始表单没有设置为一个,所以我不确定这是否是解决方案.
public void btnUploadNewStrategy5YrPlan_Click(object sender, EventArgs e)
{
//this.ConfirmForm.Text = "DSC_0 Staged";
//this.ConfirmForm.EnableReport(false);
//this.ConfirmForm.Type = frmConfirmForecastUpload.LoadType.DSC_0;
//this.ConfirmForm.MdiParent = this;
this.ConfirmForm.Top = this.Height / 3 - this.ConfirmForm.Height / 2;
this.ConfirmForm.Left = this.Width / 2 - this.ConfirmForm.Width / 2;
this.ConfirmForm.Show();
Cursor.Current = Cursors.WaitCursor;
SqlCommand cmd = null;
SqlDataReader dr = null;
StringBuilder sql = new StringBuilder();
try
{
var dtForecast = new DataTable();
dtForecast.Columns.Add("Unit");
dtForecast.Columns.Add("Year");
dtForecast.Columns.Add("Period");
dtForecast.Columns.Add("Acct");
dtForecast.Columns.Add("Descr");
dtForecast.Columns.Add("DEFERRAL_TYPE");
dtForecast.Columns.Add("NDC_Indicator");
dtForecast.Columns.Add("Mgmt Cd");
dtForecast.Columns.Add("Prod");
dtForecast.Columns.Add("Node");
dtForecast.Columns.Add("Curve_Family");
dtForecast.Columns.Add("Sum Amount");
dtForecast.Columns.Add("Base Curr"); …
Run Code Online (Sandbox Code Playgroud)