如何在C#中的byte []数组中设置BinaryImageColumnin RadGrid的图像源?

时间:2016-07-18 07:32:14

标签: c# asp.net telerik

我有以下ASP.NET:



<Columns>
  <telerik:GridClientSelectColumn UniqueName="GridClientSelectColumn1" />
  <telerik:GridBinaryImageColumn UniqueName="BinaryImageColumn" />
  <telerik:GridBoundColumn DataField="PRODUCT_NAME" SortExpression="PRODUCT_NAME" HeaderText="<%$ Resources:Strings, ProductName %>" HeaderButtonType="TextButton" />
  <telerik:GridBoundColumn DataField="STORE_NAME" SortExpression="STORE_NAME" HeaderText="<%$ Resources:Strings, Supplier %>" HeaderButtonType="TextButton" />
  <telerik:GridBoundColumn DataField="PRODUCT_PRICE" SortExpression="PRODUCT_PRICE" HeaderText="<%$ Resources:Strings, UnitPrice %>" HeaderButtonType="TextButton" />
  <telerik:GridBoundColumn DataField="PRODUCT_QUANTITY" SortExpression="PRODUCT_QUANTITY" HeaderText="<%$ Resources:Strings, Quantity %>" HeaderButtonType="TextButton" />
  <telerik:GridBoundColumn DataField="TRANS_TOTAL" SortExpression="TRANS_TOTAL" HeaderText="<%$ Resources:Strings, TotalPrice %>" HeaderButtonType="TextButton" />
</Columns>
&#13;
&#13;
&#13;

代码背后:

&#13;
&#13;
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) {
  SQLHelper a = new SQLHelper(SQLHelper.ConnectionStrings.KernelConnectionString);
  DataTable newdt = DataHelper.GetProductAdditionalObjects(11);
  for (int i = 0; i < newdt.Rows.Count; i++) {
    if (int.Parse(newdt.Rows[i]["PROD_OBJECT_SPECS_ID"].ToString()) == 1) {
      byte[] img = Converter.ObjectToByteArray(newdt.Rows[i]["OBJECT_BINARIES"]); //Convert Object to Byte Array
    }
  }
  GridDataItem item = e.Item as GridDataItem;
  if (item != null) {
    (item["BinaryImageColumn"].Controls[0] as RadBinaryImage).DataValue = img;
  }
}
&#13;
&#13;
&#13;

问题是它给了我一个错误: 名字&#39; img&#39;在当前上下文中不存在,尽管它是我想在这种情况下使用的字节数组

2 个答案:

答案 0 :(得分:2)

图像字节数组可以在RadGrid的ItemDataBound事件中处理。

<Columns>
    <telerik:GridBinaryImageColumn UniqueName="BinaryImageColumn" />
    <telerik:GridBoundColumn DataField="PRODUCT_NAME" SortExpression="PRODUCT_NAME" HeaderText="<%$ Resources:Strings, ProductName %>" HeaderButtonType="TextButton" />
</Columns>

protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
   GridDataItem item = e.Item as GridDataItem;
   if(item != null)
   {
      (item["BinaryImageColumn"].Controls[0] as RadBinaryImage).DataValue = yourImgByteArray;
   }
}
  

GridBinaryImageColumn 中的每个单元格都包含从a流式传输的图像   二进制图像源字段(通过 DataField 属性指定   专栏)。使用时,此列将显示 RadBinaryImage 控件   在视图模式下, RadUpload RadAsyncUpload 在编辑模式下上传   图片。上传类型由 UploadControlType 决定   属性。此外,您可以在项目时保留二进制数据   通过将 PersistBinaryDataOnEdit 属性设置为打开以进行编辑   的即可。这将强制控件将旧的二进制图像传递给   数据源,因此可以保留而不是删除。

可在以下链接中找到更多详细信息。

http://docs.telerik.com/devtools/aspnet-ajax/controls/grid/columns/column-types#gridbinaryimagecolumn

答案 1 :(得分:1)

我不知道我的回答对你有帮助。 Fist RadGridview列添加(图像或文本等)。

RadGridView1.Rows.AddNew();
 RadGridView1.Rows[RadGridView1.Rows.Count - 1].Cells["Data1"].Value = byteArrayToImage(your Byte Array)
//My First Column(Data1) is ImageColumn.

public Image byteArrayToImage(byte[] byteArrayIn)
{
     MemoryStream ms = new MemoryStream(byteArrayIn);
     Image returnImage = Image.FromStream(ms);
     return returnImage;
}