jeudi 4 juin 2015

jpeg to byte array, while conversion logic is inside if statement

I'm sure this is a very simple issue that even inexperienced developers would be able to do, but I'm just starting out.

I've put an if statement round the logic to convert a jpeg into a byte array so that the conversion doesn't happen unless there is a file selected. But this makes the variable logoBytes invisible to the data parameter. A colleague told me I would have to put the logic for the conversion into a method, and then reference that method somewhere, but I'm still rather confused.

if (logoPrvw.Value != null)
{ 
    System.Drawing.Image img = System.Drawing.Image.FromFile(logoPrvw.Value);
    byte[] logoBytes;
    using (MemoryStream ms = new MemoryStream())
    {
        img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        logoBytes = ms.ToArray();
    }
}
TemplateData data = new TemplateData(txtSchemeCode.Text, txtVersion.Text, txtComment.Text, txtTemplateId.Text, logoBytes);

                if (ddSchemeCode.SelectedIndex == 0)
                {
                    lblCreated.Visible = true;
                    lblUpdated.Visible = false;
                    DataClass.addNewSchemeCode(data);
                }

                if (ddSchemeCode.SelectedIndex == 0 && ddVersion.SelectedIndex != 0)
                {
                    lblCreated.Visible = true;
                    lblUpdated.Visible = false;
                    DataClass.addNewVersion(data);
                }

                if (ddSchemeCode.SelectedIndex != 0 && ddVersion.SelectedIndex == 0)
                {
                    lblUpdated.Visible = true;
                    lblCreated.Visible = false;
                    DataClass.UpdateData(data);
                }

Here is the TemplateData class

    public class TemplateData
{
    public byte[] Logo { get; set; }
    public string TemplateId { get; set; }
    public string SchemeCode { get; set; }
    public string Version { get; set; }
    public string Comment { get; set; }

    public TemplateData(string schemeCode, string version, string comment, string templateID, byte[] logo)
    {
        SchemeCode = schemeCode;
        Version = version;
        Comment = comment;
        TemplateId = templateID;
        Logo = logo;

    }

    public TemplateData(SqlDataReader dr)
    {
        initialiseData();
        if (dr.HasRows)
        {
                Version = dr["Version"].ToString();
                Logo = (byte[])dr["Logo"];                 
                TemplateId = dr["TemplateId"].ToString();
                Comment = dr["Comment"].ToString();
                SchemeCode = dr["SchemeCode"].ToString();
        }
    }

Aucun commentaire:

Enregistrer un commentaire