0

私のコードについて助けが必要です。私はすでに完了して動作している DataGridView を持っていますが、最初の列セルに 3 (0、1、または 2) の範囲のバイト変数を格納しています。

私はあまりにも 3 つの ico 写真 (16 x 16px) をそれぞれ異なる色で持っています。値 (0、1、2) の代わりにセルに写真 (赤、緑、黄色) を表示したい。

私を助けてください!

ありがとう

レオ

4

3 に答える 3

0

グリッドビューが何らかのデータソースにバインドされている場合、データ ソースを拡張して、バイト列に基づいて画像を返す画像列を追加できます。たとえば、gridview がエンティティにバインドされている場合、エンティティ クラスに新しいプロパティを追加できます。

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

または、rowCreated イベントを処理して、Byte Value に応じて Image を提供できます

于 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 に答える