我有一个GridView,它是根据某些DropDown列表中指定的值从数据库中填充的。我可以使用GridView将新行插入数据库,但在更新现有行时遇到问题。
我理解为了将行更新到数据库中,我在GridView上设置了一个DataKeyName,捕获所选行的DataKey值,并将其作为参数传递给SQL过程。
这是我的基本GridView设置(我删除了格式化相关代码)。
<asp:GridView id="Application_GridView" runat="server"
DataKeyNames="appln_OID"
ShowFooter="True"
OnRowEditing="Application_GridView_RowEditing"
OnRowUpdating="Application_GridView_RowUpdating"
OnRowCancelingEdit="Application_GridView_OnRowCancelingEdit"
AutoGenerateColumns="false"
这就是我被卡住的地方 - 我的DataKeyName appln_OID包含二进制值。 我见过DataKey是INT或字符串的例子 例如:
int intforumid = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Values[0]);
或
string val = (string)this.grid.DataKeys[rowIndex]["myKey"];
但无法找到如何捕获二进制值。
根据https://msdn.microsoft.com/en-us/library/cc716729(v=vs.110).aspx,它应该是一个Byte [],所以我尝试了这个
GridViewRow row = ((GridView)sender).Rows[e.RowIndex];
string applnkey = Application_GridView.DataKeyNames[row.RowIndex];
Byte appln_oid = Convert.ToByte(Application_GridView.DataKeys[row.RowIndex].Value);
给出错误无法转换类型&#39; System.Byte []&#39;输入&#39; System.IConvertible&#39;。
请帮我理解我在尝试获取二进制DataKeyName值时遇到的错误!
答案 0 :(得分:0)
错误消息:
无法将类型为“System.Byte []”的对象强制转换为类型 'System.IConvertible'
似乎暗示底层列实际上是一个字节数组,而不是一个字节。如果是这种情况,您可以尝试:
byte[] appln_oid = (byte [])Application_GridView.DataKeys[row.RowIndex].Value;
如果仍然无效,您可以尝试:
string info = Application_GridView.DataKeys[row.RowIndex].Value.GetType().ToString();
通过调试器运行它,并在运行该代码行后告诉我们“info”中的内容。这将让我们知道该字段的数据类型。