2014-05-24 62 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