1

非常に簡単なものが欠けているか、tryParse関数をまったく理解していないため、これを尋ねるのはちょっとばかげています。

素人の言葉で言えば、次のコードでやりたいことは、データグリッドビューのすべての列をコードループすることです。列名の最後の2文字が数値の場合、最後の2文字の数値(int.TryParseを使用)を別の変数と比較します。基本的に、最後の2桁を整数に変換でき、その整数が比較対象の変数よりも大きい列については、すべての列を読み取り専用にしたいのです。

以下の私のコードは、int_tryParseの前に変数を段階的に設定しようとしているので、おそらく少し平凡ですが、後で修正できます。

C#、VS2008:

foreach (DataGridViewColumn col in grd1.Columns)
                {
                    string myCol = col.Name;
                    int myColLength = col.Name.Length;
                    string myColMonth = myCol.Substring(myColLength - 2);
                    if (int.TryParse(myColMonth, out myColMonth) <= myMostRecentActualMonth)
                    {
                        col.ReadOnly = true;
                    }
                    else
                    {
                        col.ReadOnly = false;
                    }
                }        
4

5 に答える 5

2

このTryParseメソッドはBoolean、解析が成功したかどうかを示す値を返します。その場合、出力パラメーターを解析済みの値に設定します。

したがって、次のようなものが必要になります。

int parsedMonth; // This will get set if myColMonth is a valid integer
if (int.TryParse(myColMonth, out parsedMonth) && parsedMonth <= myMostRecentActualMonth)
{
   // ...
}
于 2013-03-14T19:07:11.623 に答える
0

int.TryParsebool の戻り値の型があります:

ここから行ってみてください:

       foreach (DataGridViewColumn col in grd1.Columns)
        {
            string myCol = col.Name;
            int myColLength = col.Name.Length;
            string myColMonth = myCol.Substring(myColLength - 2);
            int myIntColMonth;
            if (int.TryParse(myColMonth, out myIntColMonth) 
                && myIntColMonth <= myMostRecentActualMonth)
            {
                col.ReadOnly = true;
            }
            else
            {
                col.ReadOnly = false;
            }
        }   
于 2013-03-14T19:10:10.913 に答える
0

このようにコードを書き直すことができます。最初にint、解析された値を保存する別の値が必要です。次に、その値がより低いかどうかを確認しますmyMostRecentActualMonth

foreach (DataGridViewColumn col in grd1.Columns)
{
    string myCol = col.Name;
    int myColLength = col.Name.Length;
    string myColMonth = myCol.Substring(myColLength - 2);
    int myColMonthIntValue = int.MaxValue;
    if (int.TryParse(myColMonth, out myColMonthIntValue) && myColMonthIntValue <= myMostRecentActualMonth)
    {
        col.ReadOnly = true;
    }
    else
    {
        col.ReadOnly = false;
    }
}
于 2013-03-14T19:10:23.313 に答える
0

TryParse変換が成功したかどうかを示す bool を返します。(何をしているか)の結果を比較するのではTryParseなく、渡した変数と比較したいのです。

そう; if (int.TryParse(myColMonth, out myColMonth) <= myMostRecentActualMonth)

なる必要があります。

 if (int.TryParse(myColMonth, out myColMonth)
    if ( myColMonth <= myMostRecentActualMonth)

最初に int を解析したことを確認してから、比較を行います。

于 2013-03-14T19:10:46.760 に答える
0
foreach (DataGridViewColumn col in grd1.Columns)
     {
         string myCol = col.Name;
         int myColLength = col.Name.Length;
         string myColMonth = myCol.Substring(myColLength - 2);
         int myColMonthInt = 0;
         if (int.TryParse(myColMonth, out myColMonthInt)) 
         {  
             if (myColMonthInt <= myMostRecentActualMonth)
             {
                 col.ReadOnly = true;
             }
             else
             {
                 col.ReadOnly = false;
             }
         } 
         else 
         {
             // what do you want to do is last two chars can't be converted to int?
             col.ReadOnly = true;
         }
     }        
于 2013-03-14T19:11:51.163 に答える