यहां छवि विवरण दर्ज करेंसंग्रहीत कार्यविधि का उपयोग करके ग्रिडव्यू में छवि कैसे प्रस्तुत करें?

वर्तमान में ग्रिडव्यू में जो दिख रहा है वह छवि या फ़ोल्डर का पथ (स्थान) है, लेकिन मुझे छवि को स्वयं प्रस्तुत करने की आवश्यकता है - वह पहला कॉलम एक छवि कॉलम बनना चाहिए। यह सी # का उपयोग कर विंडोज़ फॉर्म के लिए है। सहायता के लिए धन्यवाद।

छवि वास्तविक छवियों के बजाय छवि पथ दिखा रही है

void FillDataGridView_Main()
{
    if (sqlCon.State == ConnectionState.Closed)
        sqlCon.Open();

    SqlDataAdapter sqlDA = new SqlDataAdapter("[sp_selectTop10CycleTime]", sqlCon);
    sqlDA.SelectCommand.CommandType = CommandType.StoredProcedure;

    sqlDA.SelectCommand.Parameters.AddWithValue("@date", DateTime.Now.ToShortDateString());

    DataTable dataTbl = new DataTable();
    sqlDA.Fill(dataTbl);

    dgvNextCycleTime.DataSource = dataTbl;

    sqlCon.Close();
}

अब नीचे दिए गए कोड के साथ काम कर रहे हैं :) लेकिन हर 1 सेकंड में शून्य को अपडेट करने के लिए टाइमर का उपयोग करते समय एक और त्रुटि का सामना करना पड़ता है FillDataGirdView_Main ()

 void FillDataGridView_Main()
    {
        if (sqlCon.State == ConnectionState.Closed)
            sqlCon.Open();
        SqlDataAdapter sqlDA = new SqlDataAdapter("[sp_selectTop10CycleTime]", sqlCon);
        sqlDA.SelectCommand.CommandType = CommandType.StoredProcedure;
        sqlDA.SelectCommand.Parameters.AddWithValue("@date", DateTime.Now.ToShortDateString());
        DataTable dataTbl = new DataTable();
        sqlDA.Fill(dataTbl);
        dgvNextCycleTime.DataSource = dataTbl;
        sqlCon.Close();

        int ImagePathIndex = 0; // assuming that the image path  column is 0 (See in your case) 
        dgvNextCycleTime.Columns[ImagePathIndex].Visible = false; // Make visibility for the path = false

        DataGridViewImageColumn ImageColunm = new DataGridViewImageColumn();
        ImageColunm.HeaderText = "Image";
        ImageColunm.Name = "ImageName";
        ImageColunm.ImageLayout = DataGridViewImageCellLayout.Normal;
        ImageColunm.Image = null;
        dgvNextCycleTime.Columns.Insert(1, ImageColunm); // Add the new colunm to the grid 

        // Add the image to the new column in the grid
        foreach (DataGridViewRow row in dgvNextCycleTime.Rows)
        {
            Image img = Image.FromFile(row.Cells[ImagePathIndex].Value.ToString());
            DataGridViewImageCell cell = row.Cells["ImageName"] as DataGridViewImageCell;
            cell.Value = img;
        }
0
NoName123 20 सितंबर 2019, 14:21

3 जवाब

सबसे बढ़िया उत्तर

आपको छवि के लिए नया कॉलम जोड़ना होगा और छवि पथ को दृश्यता = असत्य बनाना होगा

तो आपका कोड ऐसा होगा :-

sqlCon = new SqlConnection(connectionString);
        if (sqlCon.State == ConnectionState.Closed)
            sqlCon.Open();

        SqlDataAdapter sqlDA = new SqlDataAdapter("[sp_selectTop10CycleTime]", sqlCon);
        sqlDA.SelectCommand.CommandType = CommandType.StoredProcedure;

        sqlDA.SelectCommand.Parameters.AddWithValue("@date", DateTime.Now.ToShortDateString());


        DataTable dataTbl = new DataTable();


        sqlDA.Fill(dataTbl);

        dgvNextCycleTime.DataSource = dataTbl;

        sqlCon.Close();
        //////////////////////////////// New code ////////////////////////////
        int ImagePathIndex = 0; // assuming that the image path  column is 0 (See in your case) 
        dgvNextCycleTime.Columns[ImagePathIndex].Visible = false; // Make visibility for the path = false

        DataGridViewImageColumn ImageColunm = new DataGridViewImageColumn();
        ImageColunm.HeaderText = "Image";
        ImageColunm.Name = "ImageName";
        ImageColunm.ImageLayout = DataGridViewImageCellLayout.Stretch;
        ImageColunm.Image = null;
        dgvNextCycleTime.Columns.Add(ImageColunm); // Add the new colunm to the grid 


        // Add the image to the new column in the grid
        foreach (DataGridViewRow row in dgvNextCycleTime.Rows)
        {

            Image img = Image.FromFile(row.Cells[ImagePathIndex].Value.ToString());
            DataGridViewImageCell cell = row.Cells["ImageName"] as DataGridViewImageCell;
            cell.Value = img;
        }
0
Hassan Badry 20 सितंबर 2019, 18:51
धन्यवाद हसन बद्री, मैंने प्रश्नों को अपडेट किया .. मुझे टाइमर का उपयोग करने में त्रुटि का सामना करना पड़ा लेकिन टाइमर के बिना, यह आसान है .. कृपया मदद करें।
 – 
NoName123
22 सितंबर 2019, 05:49
मुझे लगता है कि फ़ोरैच लूप में कोई समस्या आई है? डीबग करने का प्रयास किया, जब लूप समाप्त होता है और लूप को फिर से शुरू करने का प्रयास करता है, तो फ़ोरैच लूप की पहली पंक्ति की ओर इशारा करते हुए एक त्रुटि होती है। आशा है कि आप कृपया इसे हल करने में मेरी मदद कर सकते हैं
 – 
NoName123
22 सितंबर 2019, 07:36
ठीक है तो इस लाइन को कोड से निकालने का प्रयास करें: - DataGridViewImageColumn ImageColunm = new DataGridViewImageColumn(); ImageColunm.HeaderText = "इमेज"; इमेजकॉलनम.नाम = "इमेजनाम"; ImageColunm.ImageLayout = DataGridViewImageCellLayout.Normal; इमेज कॉलम। इमेज = अशक्त; dgvNextCycleTime.Columns.Insert(1, ImageColunm); और उन्हें इसके बजाय फॉर्म लोड में डाल दें
 – 
Hassan Badry
23 सितंबर 2019, 17:23
आपने जो निर्देश दिया था उसे लागू किया लेकिन dgvNextCycleTime की ओर इशारा करते हुए फॉर्मलोड में त्रुटि का संकेत दिया।
 – 
NoName123
26 सितंबर 2019, 00:11

अपने लक्ष्य को प्राप्त करने के लिए, अपने फॉर्म पर DataGridView नियंत्रण रखें और कॉलम परिभाषित करें। मेरे उदाहरण में, दो कॉलम हैं जहां पहले एक का उपयोग छवि दिखाने के लिए किया जाता है (कॉलम प्रकार DataGridViewImageColumn) और दूसरा टेक्स्ट कॉलम (टाइप DataGridViewTextBoxColumn) है, जैसा कि इस छवि में है:

enter image description here

कोड में, जब आप डेटा को DataTable में लोड करने के लिए अपनी संग्रहीत कार्यविधि का उपयोग करते हैं, तो पंक्तियों के माध्यम से पुनरावृति करें और उन पंक्तियों को अपने dgvNextCycleTime नियंत्रण में बनाएं, कुछ इस तरह:

//this is my test data, you should start with foreach line
DataTable dataTbl = new DataTable();
dataTbl.Columns.Add("ImageColumn", typeof(string));
dataTbl.Columns.Add("SecondColumn", typeof(string));

dataTbl.Rows.Add(new string[] { @"c:\temp\img1.png", "some title" });
dataTbl.Rows.Add(new string[] { @"c:\temp\img2.png", "some title2" });

//here you need to go through every row in DataTable, create Image object from path
foreach (DataRow row in dataTbl.Rows)
{
    Image img = Image.FromFile(row[0].ToString()); //be sure you're getting path from correct column (first one in my example)
    dgvNextCycleTime.Rows.Add(new object[] { img, row[1].ToString() }); //second column, with some text
}

और परिणाम है:

enter image description here

0
Nino 20 सितंबर 2019, 15:14
धन्यवाद नीनो, यह काम कर रहा है। लेकिन मैंने सवाल अपडेट किया .. कृपया मदद करें। हर सेकेंड ग्रिडव्यू को अपडेट करने के लिए टाइमर का उपयोग करते हुए, त्रुटि का संकेत दिया गया था। शुक्रिया
 – 
NoName123
22 सितंबर 2019, 05:50
मुझे लगता है कि फ़ोरैच लूप में कोई समस्या आई है? डीबग करने का प्रयास किया, जब लूप समाप्त होता है और लूप को फिर से शुरू करने का प्रयास करता है, तो फ़ोरैच लूप की पहली पंक्ति की ओर इशारा करते हुए एक त्रुटि होती है। आशा है कि आप कृपया इसे हल करने में मेरी मदद कर सकते हैं
 – 
NoName123
22 सितंबर 2019, 07:36

यदि आपने डेटाबेस में पथ सहेजा है, तो आप छवि लोड करने के लिए DataGridViewImageColumn' और CellFormatting ईवेंट का उपयोग कर सकते हैं।

आप यहां पृष्ठ के अंतिम पोस्ट में नमूना देख सकते हैं:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/9e676b21-fa8b-4e35-ba22-b7c7f9963593/image-retriving-from-sql-to-data-gridview?forum=winformsdatacontrols

0
Nino 20 सितंबर 2019, 15:15