how to allow null Column Cast on datagrid in wpf

KwebenaAcquah-9104 306 Reputation points
2021-03-29T01:54:25.767+00:00

Please am having a datagrid that grid that loads data directly from the database like this:

public partial class MainWindow : Window  
           {  
           private DataTable dataTable;  
           private DataTable resDataTable;  
           public MainWindow()  
           {  
             InitializeComponent();  
              dataTable = GetDataTable();  
             dataGrid.ItemsSource = dataTable.DefaultView;  
         }  
         public DataTable GetDataTable()   
         {  
             string connString = @"";  
             using (SqlConnection sqlConnection = new SqlConnection(connString))  
             {  
                 sqlConnection.Open();  
                 using (SqlCommand command = new SqlCommand("select * from scoretable",sqlConnection))  
                 {  
                     DataTable dataTable = new DataTable();  
                     dataTable.Load(command.ExecuteReader());  
                     return dataTable;  
                 }  
             }  
         }  

![83826-11.jpg][1]

every thing works very fine while using this code method below;

 public List<string> getRank(string fieldName)   
 {         
     List<string> positions = new List<string>();  
     List<int> values = dataTable.AsEnumerable().Select(s => s.Field<int>(fieldName)).OrderByDescending(d=>d).ToList();  
     for (int i = 0; i < dataTable.Rows.Count; i++)  
     {  
        int index = values.IndexOf(dataTable.Rows[i].Field<int>(fieldName));  
         positions.Add(AddOrdinal(index + 1));  
     }  
     return positions;  
 }  

here is my button click event that calls the getRank Method Above;

private void button_Click(object sender, RoutedEventArgs e)  
     {  
         resDataTable = new DataTable();  
         resDataTable.Columns.Add("id", typeof(string));  
         for (int i = 1; i < dataTable.Columns.Count; i++)  
         {  
             resDataTable.Columns.Add(dataTable.Columns[i].ColumnName, typeof(string));  
         }  
         List<string> mathRank = getRank("Math");  
         List<string> scienceRank = getRank("Science");  
         List<string> englishRank = getRank("English");  
         List<string> historyRank = getRank("History");  
                          
     }  

QUESTION:

but when a column happens to be NULL without any value from the MAIN LOADING WINDOW above when i try to cast it again i get this error saying:

![83922-33.png][3]

i want to allow NULL within this LOADING WINDOW programatically within my code method here

  public List<string> getRank(string fieldName)   
     {         
         List<string> positions = new List<string>();  
         List<int> values = dataTable.AsEnumerable().Select(s => s.Field<int>(fieldName)).OrderByDescending(d=>d).ToList();  
         for (int i = 0; i < dataTable.Rows.Count; i++)  
         {  
            int index = values.IndexOf(dataTable.Rows[i].Field<int>(fieldName));  
             positions.Add(AddOrdinal(index + 1));  
         }  
         return positions;  
     }  

but i cannot do this can someone teach me how to Fix this Error Please; (thanks)

[1]: /api/attachments/83826-11.jpg?platform=QnA [3]: /api/attachments/83922-33.png?platform=QnA

Windows Presentation Foundation
Windows Presentation Foundation
A part of the .NET Framework that provides a unified programming model for building line-of-business desktop applications on Windows.
2,671 questions
C#
C#
An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
10,235 questions
{count} votes

Accepted answer
  1. Peter Fleischer (former MVP) 19,231 Reputation points
    2021-04-06T08:58:33.42+00:00

    HI,
    use this LinQ:

        List<int> values = dataTable.AsEnumerable().Select(s => (s[fieldName] == DBNull.Value) ? 0 : s.Field<int>(fieldName)).OrderByDescending(d => d).ToList();
    

0 additional answers

Sort by: Most helpful