公共类 LispFunctions。
{。
。
public static ResultBuffer GetDataFromDGV(ResultBuffer resbuf)。
{ // 无论我做什么,我都会得到这个异常:“对象引用未设置为对象的实例。。
var 数组 = 新字符串。
{。
{“a”, “b”, “c” },。
{“d”, “e”, “f” }。
};。
var dialog = new Dialog();。
var result = AcAp.ShowModalDialog(dialog);。
if (result != DialogResult.OK)。
返回空值;。
// 返回 Array2dToList(array); // 如果我决定返回这个,那么我会得到实际的数组。
返回 Array2dToList(dialog.arrayDGV); // 我每次都会得到 null(但我应该得到一些东西?? -检查对话框类)。
。
}。
。
私有静态结果缓冲区数组2dToList(字符串[,]数组)。
{。
var retVal = new ResultBuffer();。
for (int i = array.GetLowerBound(0);i 。
{。
retVal.Add(new TypedValue((int)LispDataType.ListBegin));。
for (int j = array.GetLowerBound(1);j 。
{。
retVal.Add(new TypedValue((int)LispDataType.Text, array));。
}。
retVal.Add(new TypedValue((int)LispDataType.ListEnd));。
}。
返回 retVal;。
}。
。
}public 分部类 对话框:Form // 窗体包含两个用于确定和取消的按钮,以及一个包含几列的数据网格视图,因此用户可以在表中输入。
{。
public string[,] arrayDGV { get; }。
。
公共对话()。
{。
InitializeComponent();。
可以在[设计]选项卡中设置以下属性。
dataGridView1.AllowUserToAddRows = true;。
dataGridView1.AllowUserToDeleteRows = true;。
btnOk.DialogResult = DialogResult.OK;。
btnCancel.DialogResult = DialogResult.Cancel;。
}。
。
private void btnOk_Click(object sender, EventArgs e)。
{。
。
https://stackoverflow.com/questions/25746659/how-to-get-datagridview-data-in-a-2d-array/25747273。
数据网格视图到 2D 数组。
string[,] arrayDGV = new string; // 首先创建一个 2D 数组可变,并对数据网格视图的行和 //列进行计数。
foreach (DataGridViewRow row in dataGridView1.Rows)。
{。
整型 i = 行,索引;。
foreach (DataGridViewColumn col in dataGridView1.Columns)。
{。
int j = col.索引;。
string itm = dataGridView1.Rows.细胞.Value.ToString();。
if (itm == null itm == String.Empty itm.Trim().长度 == 0) // 我已经包含了这个,只是为了确保我会得到一些东西。
arrayDGV = “空”;。
还。
arrayDGV = itm;。
}。
}。
。
} // btnOk_Click。
}。
通常,您不处理“确定”和“取消”按钮的单击事件,只设置它们的DialogResult属性
当调用LispFunction创建对话框实例时,它可以访问其所有公共实例成员(属性和方法),以这种方式公开数据是更好的做法
公共部分类对话框:表单
{
//
///创建对话框的新实例。
//
公共对话框()
{
初始化组件()
//可以在选项卡中设置以下属性。
dataGridView1.AllowUserToAddress=true
dataGridView1.AllowUserToDeleteRows=true
btnOk。DialogResult=DialogResult.OK
btnCancel。DialogResult=DialogResult.Cancel
}
//
///将DataGridView内容作为二维数组返回。
//
///
二维数组
公共字符串[,]GridToArray()
{
int numRows=dataGridView1.RowCount-1
int numColumns=dataGridView1.ColumnCount
var数组=新字符串
用于(int i=0;i
{
用于(int j=0;j
{
var-value=dataGridView1。行。单元格。值
数组=value==null?“null”:value.ToString()
}
}
返回数组
}
}
公共结果缓冲区从DGV获取数据(结果缓冲区resbuf)
{
使用(var dialog=new dialog())
{
var result=AcAp.ShowModalDialog(对话框)
如果(结果!=DialogResult.OK)
返回null
返回Array2dToList(dialog.GridToArray())
}
}
私有结果缓冲数组2dtolist(字符串[,]数组)
{
var-retVal=new-ResultBuffer()
for(int i=array.GetLowerBound(0);我
{
返回。添加(新的TypedValue((int)LispDataType.ListBegin))
for(int j=array.GetLowerBound(1);j
{
返回。将(new-TypedValue((int)添加到LispDataType。文本,数组)
}
返回。添加(newtypedValue((int)LispDataType.ListEnd))
}
返回retVal
}
翻译错误代码(429):请求 QPS 超过限制。 关于“良好实践”的另外两点评论(我有时会忘记尊重):
-始终使用使用语句来创建模态对话框的实例(“关闭”模态对话框只会隐藏它,但不会调用关闭/处置,因此它在所有会话期间都保留在内存中)。
-当实例方法不是绝对必要时,总是喜欢对命令或LISP函数使用静态方法。
页:
1
[2]