0

我的代码需要一些帮助。我已经完成并工作了 DataGridView,但是,在第一列单元格中,我存储了一个范围为 3(0、1 或 2)的字节变量。

我也有 3 张 ico 图片(16 x 16px),每张都有不同的颜色。我想在单元格上看到图片(红色、绿色和黄色)的值(0、1 和 2)。

请帮我!

谢谢

狮子座

4

3 回答 3

0

如果您的 gridview 绑定到某个数据源,那么您可以扩展数据源以添加一个图像列,该列将基于字节列返回图像。例如,如果 gridview 绑定到实体,那么你可以在你的实体类中添加一个新属性

 public Image Image {  get {   if(ByteValue == 0) return ZeroImage;    else if(ByteValue == 1) return OneImage; else  return TwoImage; } }

或者您可以处理 rowCreated 事件以提供取决于字节值的图像

于 2012-06-29T05:30:02.680 回答
0

假设:

  1. 您正在使用 VS2010 C# ASP.NET 4
  2. 您的 ico 文件位于网站主目录 (~/Images/) 的文件夹中

如果您有原始表格的形式:

CREATE TABLE YourOriginalTable(
    [PK] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
    [TheByteVariable] [int] NOT NULL,
    [SomeOtherTextColumn] [nvarchar](250) NOT NULL);

数据如下:

INSERT YourOriginalTable VALUES
(0,'Jon'),
(2,'Joan'),
(1,'John'),
(0,'Jonnie'),
(2,'Jonny');

您可以在您的 aspx 文件中使用以下内容:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="PK,gvImageCode" DataSourceID="SqlDataSource1">
        <Columns>
            <asp:BoundField DataField="PK" HeaderText="PK" ReadOnly="True" SortExpression="PK"  Visible="False"/>
            <asp:BoundField DataField="gvImageCode" HeaderText="gvImageCode" ReadOnly="True" SortExpression="gvImageCode" Visible="False" />
            <asp:ImageField DataImageUrlField="gvImageFileName" HeaderText="i" ></asp:ImageField>
            <asp:BoundField DataField="SomeOtherTextColumn" HeaderText="SomeOtherTextColumn" SortExpression="SomeOtherTextColumn" />

        </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:YourConnectionString %>" 
        SelectCommand="DECLARE @tb TABLE([gvImageCode] [int] NOT NULL PRIMARY KEY CLUSTERED,[gvImageFileName] [nvarchar](250) NOT NULL);
                       INSERT @tb VALUES (0, N'~/Images/Red.ico'),(1, N'~/Images/Green.ico'),(2, N'~/Images/Yellow.ico');
                       SELECT PK, gvImageFileName, SomeOtherTextColumn, gvImageCode FROM YourOriginalTable INNER JOIN @tb ON TheByteVariable = gvImageCode">
    </asp:SqlDataSource>

解决方案可以在SelectCommand. 您可以看到在那里创建了一个带有 ico 文件 URL 的表并将其加入到原始表中。

注意力:

  1. GridView 的 asp:ImageField 不是常规列。

  2. GridView 的 DataKeyNames,两个键都必须存在。

  3. 键和所有显示的列必须出现在SELECT子句中。

  4. 为了隐藏列使用:Visible="False"

经测试!

我希望它有帮助

于 2012-06-29T06:24:17.623 回答
0

试试这个活动

private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
  int imageIndex =  Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].Value);
  switch (imageIndex)
  {
   case 0:
   //dataGridView1.Rows[e.RowIndex].Cells[0] =  get image 0
   break;
   //case 1:
   //case 2:
  }
}
于 2012-06-29T05:52:31.410 回答