我的代码需要一些帮助。我已经完成并工作了 DataGridView,但是,在第一列单元格中,我存储了一个范围为 3(0、1 或 2)的字节变量。
我也有 3 张 ico 图片(16 x 16px),每张都有不同的颜色。我想在单元格上看到图片(红色、绿色和黄色)的值(0、1 和 2)。
请帮我!
谢谢
狮子座
如果您的 gridview 绑定到某个数据源,那么您可以扩展数据源以添加一个图像列,该列将基于字节列返回图像。例如,如果 gridview 绑定到实体,那么你可以在你的实体类中添加一个新属性
public Image Image { get { if(ByteValue == 0) return ZeroImage; else if(ByteValue == 1) return OneImage; else return TwoImage; } }
或者您可以处理 rowCreated 事件以提供取决于字节值的图像
假设:
如果您有原始表格的形式:
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 的表并将其加入到原始表中。
注意力:
GridView 的 asp:ImageField 不是常规列。
GridView 的 DataKeyNames,两个键都必须存在。
键和所有显示的列必须出现在SELECT
子句中。
为了隐藏列使用:Visible="False"
经测试!
我希望它有帮助
试试这个活动
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:
}
}