2014-05-24 61 views
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。

+1

您是否要求提供給定範圍的格式爲3位數的字符串列表?用戶是否提供像「10-50」這樣的字符串範圍? – DavidG

+0

是的,先生。你有什麼主意嗎? –

回答

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 requestedResult = string.Join(allMyNumbers,「,」); –

+0

@RobertLevy是的,如果你想把它們全部作爲一個單獨的字符串,這是一個很好的電話,我會添加它。 – DavidG

+0

@DavidG先生謝謝了很多。我是Enumerable.Range的新手。謝謝! :d –

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 :) – Shell