update之后你要重新查询一遍 ,然后在给GridView 绑定
private void button2_Click(object sender, EventArgs e)
{
conn = new SqlConnection("server=;database=db_mydb;uid=T_login;pwd=");
SqlCommand cmd = new SqlCommand("select from tb_mytb", conn);
cmdCommandText = "update tb_mytb set 年龄=22 where 姓名='阿昌' ";
cmdExecuteNonQuery();
// 再调用绑定数据的方法 ,不然是没有数据的
bindData();
}
public void bindData(){
conn = new SqlConnection("server=;database=db_mydb;uid=T_login;pwd=");
SqlCommand cmd = new SqlCommand("select from tb_mytb", conn);
cmdCommandText = "select from tb_mytb ";
SqlDataAdapter sda = new SqlDataAdapter();
sdaSelectCommand = cmd;
DataSet ds = new DataSet();
sdaFill(ds, "cs");
dataGridView1DataSource = dsTables[0];
}
在你的vue组件中,可以通过@clicknative处理table行点击事件,然后在该函数中通过eventcurrentTargetrowIndex获取到当前点击的行的索引,从而判断点击的是哪一行。
ant中table动态添加的数据在不能改变表头的情况下对于一部分单元格合并比较难搞,如下
ps:请求拿到的数据是每条都有信息
我需要将相同的商家名称、联系人、及联系电话合并为一条对应后续数据
ps:下图为我想要的格式
表头固定导致对数据再无法进行处理,所以只能在渲染的角度去解决可以参考ant官网table中customRender
customRender方法有三个参数,value为当前行渲染的值,row为本行渲染的所有数据,index为行索引
对当前表头下的值进行筛选,判断重复值,并进行记录,接下来就是合并 *** 作了
假设从第一行开始需要合并两行,我们判断索引值index==0时,rowSpan == 2,注意了这里比较重要的一步 *** 作,我们需要将合并后的行数rowSpan值改为0(index == 1时,rowSpan==0),如果合并3行,则索引index为2时,也需要将rowSpan值归0。
ps:以上仅为个人理解,如有写的不正确的地方欢迎各位大佬批评指正!
可以用jQ的index()方法,举例:
<table id="table1"><tr>
<td>第1行</td>
</tr>
<tr>
<td>第2行</td>
</tr>
<tr>
<td>第3行</td>
</tr>
<tr>
<td>第4行</td>
</tr>
</table>$('#table1')find('tr')click(function() {
var idx = $(this)index() + 1; // 索引是从0开始的,故+1
consolelog('点击了第' + idx + '行');
});
<html>
<head>
<title>Table Test</title>
<meta name="generator" content="Editplus" />
<meta name="author" content="PJ" />
<script language="JavaScript">
<!--
function Delete()
{
var dgTable=documentgetElementById('tb')rows;//tb为table的ID,
var pp=windoweventsrcElement;
for (var i=0; i < dgTablelength; i++) //遍历table的行,
{
if(pp==dgTable[i]cells[2]getElementsByTagName("A")[0]) //cells[2]为触发事件的列的索引
{ //判断是否是触发事件的A标签
alert(dgTable[i]cells[0]innerText); //演示,d出所在行的第一列的内容
}
}
}
//-->
</script>
</head>
<body>
<table id="tb" border="1px" width="500px">
<tr>
<td width="40%">aaa</td>
<td width="40%">bbb</td>
<td width="15%"><a onclick="Delete()" href="#">delete</a></td>
</tr>
<tr>
<td>ccc</td>
<td>ddd</td>
<td><a onclick="Delete()" href="#">delete</a></td>
</tr>
<tr>
<td>eee</td>
<td>fff</td>
<td><a onclick="Delete()" href="#">delete</a></td>
</tr>
</table>
</body>
</html>
access数据库不同于oracle和sql
server,系统表没有提供表的列信息和索引等信息,所以取这些信息就不是简单的sql
语句能完成的,查了一下,用adox能很好的完成这些功能(在,net中也可引用adox),不过在net中OleDbConnection提供了很好的方法取列信息:DataTable
MyDbSchemaGuid_Col=
connGetOleDbSchemaTable(OleDbSchemaGuidColumns,new
object[]{null,null,thisTableName});取列索引:DataTable
MyDbSchemaGuid=
connGetOleDbSchemaTable(OleDbSchemaGuidIndexes,new
object[]{null,null,null});
具体用法可以查一下net的帮助:)
以上纯属抛砖引玉!
第一步,我先从简单的调用出发,定义了一个简单的函数,该函数仅仅实现一个整数加法求和:
LIBEXPORT_API int mySum(int a,int b){ return a+b;}
C# 导入定义:
public class RefComm
{
[DllImport("LibEncryptdll",
EntryPoint=" mySum ",
CharSet=CharSetAuto,CallingConvention=CallingConventionStdCall)]
public static extern int mySum (int a,int b);
}
在C#中调用测试:
int iSum = RefCommmySum(,);
运行查看结果iSum为5,调用正确。第一步试验完成,说明在C#中能够调用自定义的动态链接库函数。
第二步,我定义了字符串 *** 作的函数(简单起见,还是采用前面的函数名),返回结果为字符串:
LIBEXPORT_API char mySum(char a,char b){sprintf(b,"%s",a); return a;}
C# 导入定义:
public class RefComm
{
[DllImport("LibEncryptdll",
EntryPoint=" mySum ",
CharSet=CharSetAuto,
CallingConvention=CallingConventionStdCall)]
public static extern string mySum (string a, string b);
}
在C#中调用测试:
string strDest="";
string strTmp= RefCommmySum("45", strDest);
运行查看结果 strTmp 为"45",但是strDest为空。我修改动态链接库实现,返回结果为串b:
LIBEXPORT_API char mySum(char a,char b){sprintf(b,"%s",a) return b;}
修改 C# 导入定义,将串b修改为ref方式:
public class RefComm
{
[DllImport("LibEncryptdll",
EntryPoint=" mySum ",
CharSet=CharSetAuto,CallingConvention=CallingConventionStdCall)]
public static extern string mySum (string a, ref string b);
}
在C#中再调用测试:
string strDest="";
string strTmp= RefCommmySum("45", ref strDest);
运行查看结果 strTmp 和 strDest 均不对,含不可见字符。再修改 C# 导入定义,将CharSet从Auto修改为Ansi:
public class RefComm
{
[DllImport("LibEncryptdll",
EntryPoint=" mySum ",
CharSet=CharSetAnsi,CallingConvention=CallingConventionStdCall)]
public static extern string mySum (string a, string b);
}
在C#中再调用测试:
string strDest="";
string strTmp= RefComm mySum("45", ref strDest);
运行查看结果 strTmp 为"45",但是串 strDest 没有赋值。第二步实现函数返回串,但是在函数出口参数中没能进行输出。再次修改 C# 导入定义,将串b修改为引用(ref):
public class RefComm
{
[DllImport("LibEncryptdll",
EntryPoint=" mySum ",
CharSet=CharSetAnsi,CallingConvention=CallingConventionStdCall)]
public static extern string mySum (string a, ref string b);
}
运行时调用失败,不能继续执行。
第三步,修改动态链接库实现,将b修改为双重指针:
LIBEXPORT_API char mySum(char a,char b){sprintf((b),"%s",a); return b;}
C#导入定义:
public class RefComm
{
[DllImport("LibEncryptdll",
EntryPoint=" mySum ",
CharSet=CharSetAnsi,CallingConvention=CallingConventionStdCall)]
public static extern string mySum (string a, ref string b);
}
在C#中调用测试:
string strDest="";
string strTmp= RefComm mySum("45", ref strDest);
运行查看结果 strTmp 和 strDest 均为"45",调用正确。第三步实现了函数出口参数正确输出结果。
第四步,修改动态链接库实现,实现整数参数的输出:
LIBEXPORT_API int mySum(int a,int b,int c){ c=a+b; return c;}
C#导入的定义:
public class RefComm
{
[DllImport("LibEncryptdll",
EntryPoint=" mySum ",
CharSet=CharSetAnsi,CallingConvention=CallingConventionStdCall)]
public static extern int mySum (int a, int b,ref int c);
}
在C#中调用测试:
int c=0;
int iSum= RefComm mySum(,, ref c);
运行查看结果iSum 和c均为5,调用正确。
经过以上几个步骤的试验,基本掌握了如何定义动态库函数以及如何在 C# 定义导入,有此基础,很快我实现了变长加密函数在 C# 中的调用,至此目标实现。
三、结论
在 C# 中调用 C++ 编写的动态链接库函数,如果需要出口参数输出,则需要使用指针,对于字符串,则需要使用双重指针,对于 C# 的导入定义,则需要使用引用(ref)定义。
对于函数返回值,C# 导入定义和 C++ 动态库函数声明定义需要保持一致,否则会出现函数调用失败。定义导入时,一定注意 CharSet 和 CallingConvention 参数,否则导致调用失败或结果异常。运行时,动态链接库放在 C# 程序的目录下即可,我这里是一个 C# 的动态链接库,两个动态链接库就在同一个目录下运行。
附1:
<html xmlns=">
以上就是关于C# datagridview 的 table的索引值问题:全部的内容,包括:C# datagridview 的 table的索引值问题:、vue中table点击事件怎么知道点的是哪一个、Ant Design中Table动态获取数据合并单元格问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)