GridView:捕获和使用二进制DataKey

时间:2015-08-10 02:34:17

标签: c# asp.net gridview

我有一个GridView,它是根据某些DropDown列表中指定的值从数据库中填充的。我可以使用GridView将新行插入数据库,但在更新现有行时遇到问题。

我理解为了将行更新到数据库中,我在GridView上设置了一个DataKeyName,捕获所选行的DataKey值,并将其作为参数传递给SQL过程。

  1. 设置DataKey
  2. 这是我的基本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"
    
    1. 捕获所选行的DataKey值
    2. 这就是我被卡住的地方 - 我的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值时遇到的错误!

1 个答案:

答案 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”中的内容。这将让我们知道该字段的数据类型。