сохранить номера диапазонов

1

Мне нужно сохранить номера диапазонов, как если бы вы вводили диапазон 1-10, он будет сохраняться как "001,002,003,004,005, -010. Я пробовал это.

    private void AutoNum()
    {
        if (dataGridView1.RowCount.Equals(0))
        {
            textBox53.Text = "001";
        }
        else
        {
            num1 = int.Parse(dataGridView1.Rows[0].Cells[0].Value.ToString());
            for (row = 0; row < dataGridView1.Rows.Count; row++)
            {
                num2 = int.Parse(dataGridView1.Rows[row].Cells[0].Value.ToString());
                if (num2 > num1)
                {
                    num1 = num2;
                }
                if (row == dataGridView1.RowCount - 1)
                {
                    memNum = num1;
                    textBox53.Text = memNum.ToString("000");
                }
            }
        }
    }

Это означает увеличение следующего числа.

    private void Loop()
    {
        try
        {
            int txt = Convert.ToInt32(textBox35.Text);//This were I input my range number.

            if (txt == 0)
            {
                MessageBox.Show("Invalid");
            }
            else
            {
                for (int x = 0; txt > x; )
                {
                    memNum++;
                    x++;

                    da.InsertCommand = new SqlCommand("INSERT INTO Reg_Book VALUES (@Received_From, @Date_Reg, @Bin_Num, @Accession_Num, @Publication, @Author, @Title, @Copies, @Volume, @Remarks, @Acc_Num)", cs);
                    da.InsertCommand.Parameters.Add("Received_From", SqlDbType.NVarChar).Value = comboBox3.Text;
                    da.InsertCommand.Parameters.Add("Date_Reg", SqlDbType.Date).Value = dateTimePicker5.Value.ToShortDateString();
                    da.InsertCommand.Parameters.Add("Bin_Num", SqlDbType.NVarChar).Value = textBox36.Text;
                    da.InsertCommand.Parameters.Add("Accession_Num", SqlDbType.NVarChar).Value = textBox2.Text + "-" + textBox14.Text + "-" + textBox15.Text + "-" + textBox26.Text + "-" + memNum.ToString("000");
                    da.InsertCommand.Parameters.Add("Publication", SqlDbType.NVarChar).Value = textBox37.Text;
                    da.InsertCommand.Parameters.Add("Author", SqlDbType.NVarChar).Value = textBox47.Text;
                    da.InsertCommand.Parameters.Add("Title", SqlDbType.NVarChar).Value = textBox48.Text;
                    da.InsertCommand.Parameters.Add("Copies", SqlDbType.NVarChar).Value = textBox49.Text;
                    da.InsertCommand.Parameters.Add("Volume", SqlDbType.NVarChar).Value = textBox50.Text;
                    da.InsertCommand.Parameters.Add("Remarks", SqlDbType.NVarChar).Value = textBox51.Text;
                    da.InsertCommand.Parameters.Add("Acc_Num", SqlDbType.NVarChar).Value = memNum.ToString("000");

                    cs.Open();
                    da.InsertCommand.ExecuteNonQuery();
                    cs.Close();
                }
                MessageBox.Show("Saved!");
            }
        }
        catch (Exception a)
        {
            MessageBox.Show(a.ToString());
        }
    }

Это нужно сохранить и увеличить числа. Да, он работает и сохранит числа, если я буду вводить 5, он будет увеличивать 001-005. Мой вопрос в том, как я могу улучшить свой код, например, если пользователь будет вводить диапазон 10-15, 30-50.

Теги:
winforms
visual-studio-2010

2 ответа

2
Лучший ответ

Если вы используете Enumerable.Range, вы можете получить значения довольно быстро:

//Assume the user presents this as the input
var input = "10-50";

//Split the input by hyphen
var ranges = input.Split('-');

//Get all the numbers in the range and format them as a three digit string
var allMyNumbers = Enumerable.Range(
    int.Parse(ranges[0]), 
    int.Parse(ranges[1]))
    .Select(n => n.ToString("000"))

Это дает вам список строк, чтобы играть так:

foreach(var number in allMyNumbers)
{
    Console.WriteLine(number);
}

Или, если вы хотите, чтобы все числа в одной строке:

var requestedResult = string.Join(allMyNumbers,",");
  • 1
    var requiredResult = string.Join (allMyNumbers, ",");
  • 0
    @RobertLevy Да, если вы хотите, чтобы они все были одной строкой, это хороший вызов, я добавлю его.
Показать ещё 1 комментарий
1

попробуйте следующий метод

string sRange = txtRange.Text;

int iStart = Convert.ToInt32(sRange.Split('-')[0]);
int iRange = Convert.ToInt32(sRange.Split('-')[1]);

For (int x = iStart; x < (iStart + iRange); x++)
{
    //if u have entered x = 5 and range = 10
    //then x will be started from 5 and ends with 14
    //5,6,7,8,9,10,11,12,13,14
    string sNumber = x.ToString("000");
    //use sNumber to insert value
}
  • 0
    Спасибо большое, братан!
  • 0
    добро пожаловать @DontStopLearning :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню