私のコードについて助けが必要です。私はすでに完了して動作している DataGridView を持っていますが、最初の列セルに 3 (0、1、または 2) の範囲のバイト変数を格納しています。
私はあまりにも 3 つの ico 写真 (16 x 16px) をそれぞれ異なる色で持っています。値 (0、1、2) の代わりにセルに写真 (赤、緑、黄色) を表示したい。
私を助けてください!
ありがとう
レオ
グリッドビューが何らかのデータソースにバインドされている場合、データ ソースを拡張して、バイト列に基づいて画像を返す画像列を追加できます。たとえば、gridview がエンティティにバインドされている場合、エンティティ クラスに新しいプロパティを追加できます。
public Image Image { get { if(ByteValue == 0) return ZeroImage; else if(ByteValue == 1) return OneImage; else return TwoImage; } }
または、rowCreated イベントを処理して、Byte Value に応じて Image を提供できます
仮定:
元のテーブルが次の形式の場合:
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:
}
}