none
Проблемы с методами в Visual Studio 2010. C# RRS feed

  • Вопрос

  • Всем привет, возникли проблемы с методами в Visual Studio 2010, при написании программы, может как то нужно объявить их в программе? начал писать вторую программу и опять столкнулся с этим методом и тоже самое ругается на него. Подскажите пожалуйста что сделать нужно?

    Ошибка 1: Наиболее подходящий перегруженный метод для "NewProg.db_DataSet.VidLicDataTable .FindByidVidLic(int)" имеет несколько недопустимых аргументов строка 29

    Ошибка 2: Аргумент "1": преобразование типа из "string" в "int" невозможно строка 29

    ПредлагаетСоздать заглушку метода FindByidVidLic в NewProg.db_DataSet.VidLicDataTable

    Если создать начинает показывать ошибку:
    "object" не содержит определения для "vlName" и не был найден метод расширения "vlName", принимающий тип "object" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)

    Проблемы в этой строчке 

    1 случай:

    VidName = db_DataSet.VidLic.FindByidVidLic(VidKod).vlName;

    2 случай: когда создаешь заглушку метода FindByidVidLic в NewProg.db_DataSet.VidLicDataTable

    VidName = db_DataSet.VidLic.FindByidVidLic(VidKod).vlName;

    Код программы:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace NewProg
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
            private void Form2_Load(object sender, EventArgs e)
            {
                            this.vidLicTableAdapter.Fill(this.db_DataSet.VidLic);
    
            }
            protected internal string VidKod, VidName; 
            private void button1_Click(object sender, EventArgs e)
            {
                VidKod = (string)listBox1.SelectedValue;
                VidName = db_DataSet.VidLic.FindByidVidLic(VidKod).vlName;
                DialogResult = DialogResult.OK;
            }
        }
    }


    6 января 2014 г. 6:23

Ответы

  • может в таблице NewProg.db_DataSet.VidLicDataTable ваше поле VidKod является типом varchar/nvarchar? если так то попробуйте //или проблема в самом методе FindByidVidLic()
    VidName = db_DataSet.VidLic.FindByidVidLic(int.Parse(VidKod)).vlName;
    • Помечено в качестве ответа winrey 6 января 2014 г. 16:42
    6 января 2014 г. 9:47
  • VidKod = listBox1.SelectedValue.ToString();

    • Изменено Medet Tleukabiluly 6 января 2014 г. 10:54
    • Помечено в качестве ответа winrey 6 января 2014 г. 16:42
    6 января 2014 г. 10:52

Все ответы

  • может в таблице NewProg.db_DataSet.VidLicDataTable ваше поле VidKod является типом varchar/nvarchar? если так то попробуйте //или проблема в самом методе FindByidVidLic()
    VidName = db_DataSet.VidLic.FindByidVidLic(int.Parse(VidKod)).vlName;
    • Помечено в качестве ответа winrey 6 января 2014 г. 16:42
    6 января 2014 г. 9:47
  • Спасибо большое - это помогло но появилось еще кое что 

    когда программа запущена и выбираешь строку из списка и нажимаешь кнопку готово

    переходит в код на эту строчку

    VidKod = (string)listBox1.SelectedValue;

    и пишет вот это:

    Не удалось привести тип объекта "System.Int32" к типу "System.String".

    6 января 2014 г. 10:01
  • VidKod = listBox1.SelectedValue.ToString();

    • Изменено Medet Tleukabiluly 6 января 2014 г. 10:54
    • Помечено в качестве ответа winrey 6 января 2014 г. 16:42
    6 января 2014 г. 10:52
  • Огромнейшее СПАСИБО!!!!
    6 января 2014 г. 11:12
  • вопрос не зактрыт, что бы закрыть поставьте отметку на пост с правильным ответом
    6 января 2014 г. 13:08
  • Еще вопрос есть,

    1: ругается на строчку e.Cancel = true;

    пишет:  

    "System.Windows.Forms.FormClosedEventArgs" не содержит определения для "Cancel" и не был найден метод расширения "Cancel", принимающий тип "System.Windows.Forms.FormClosedEventArgs" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)

    Код:

    private void Form1_FormClosing(object sender, FormClosedEventArgs e)
            {
                if (!DataChanged)
                    return;
                DialogResult dr = MessageBox.Show("Сохранить данные?", "", MessageBoxButtons.YesNoCancel);
                if (dr == DialogResult.No)
                    return;
                if (dr == DialogResult.Cancel)
                    e.Cancel = true;
                toolStripButton1.PerformClick();
            }

    И второй вопрос по безопасности: В режиме отладки в строках ОГРН и ИНН ввожу кол-ко цифр равное ОГРН = 13 и ИНН =10, нажимаю на кнопку поиск, выдает сообщение первое: Длина ОГРН не равна 13, и второе: Длина ИНН не равна 10.

    Код:

    private bool isCipher(string s)
            {
                for (int i = 0; i < s.Length; i++)
                {
                    if (!char.IsDigit(s[i]))
                        return false;
                }
                return true;
            }
    
    private string testOgrn(string s)
            {
                if (s.Length != 13)
                    return "Длина ОГРН не равна 13";
                if (!isCipher(s))
                    return "В коде ОГРН не цифровая информация";
                return "";
            }
    
    private string testInn(string s)
            {
                if (s.Length != 10)
                    return "Длина ИНН не равна 10";
                if (!isCipher(s))
                    return "В коде ИНН не цифровая информация";
                return "";
            }

    6 января 2014 г. 13:59
  • 1. CancelEventArgs и CancelEventHandler используются для обработки события FormClosing класса Form.

    private void OtherInitialize() {
           this.Closing += new CancelEventHandler(this.Form1_Closing);
           this.isDataSaved = true;
           //this.isDataSaved = false;
        }
    
        private void Form1_Closing(Object sender, CancelEventArgs e) {
           if (!isDataSaved) {
              e.Cancel = true;
              MessageBox.Show("save first.");
           }
           else {
              e.Cancel = false;
              MessageBox.Show("bye");
           }
        }

    2. всю работу можно вот так. не дружелюбно, но ошибки надо отлавливать строго.

    public static void DoWork_OMG(string text)
            {
                if (text.Length != 13)  throw new Exception("Это не 13сим."); 
    
                if (!isDigit(text)) throw new Exception("Это не цифра.");
            }
            public static void DoWork_INN(string text)
            {
                if (text.Length != 10) throw new Exception("Это не 10сим.");
    
                if (!isDigit(text)) throw new Exception("Это не цифра.");
            }
            private static bool isDigit(string str)
            {
                foreach (char c in str)
                {
                    if (c < '0' || c > '9')
                        return false;
                }
                return true;
            }

    а так использовать

     try
                {
                    DoWork_OMG("1234567a91234");
                    Console.ReadLine();
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.Message);
                }

    6 января 2014 г. 15:38
  • второе так и не получилось, также как и в первый раз выдает Это не 13 сим., и второе: Это не 10 сим.
    6 января 2014 г. 17:28
  • посмотрите что принимает метод, если это textBox то нет ли там лишних символов, пробуйте в метод передавать просто 

    "1234567a91234"

    "1234567191234"
    "1234567"



    6 января 2014 г. 17:52