繁体   English   中英

解决错误消息无法强制将类型为“ System.String”的对象转换为类型为“ System.Data.DataRowView”的对象

[英]resolving error message Unable to cast object to type 'System.String' to type 'System.Data.DataRowView'

我有一个表单,系统管理员使用保存按钮将数据输入到tblministries表(例如ABCDEF)中。 加载表单时,ABCDEF加载到清单列表框(cblMinistries)。 用户可以检查清单列表中的任何数据(例如BCF),然后将其与用户成员ID一起保存到tblMembershipministry表中。 当成员输入其ID并单击搜索按钮时,该表单应将ABCDEF加载到清单列表框中,并且应在清单框中检查tblMembershipministry表(BCF)中具有相同成员ID的任何数据。 我的问题是我在此代码行“ DataRowView row =(DataRowView)this.cblMinistries.Items [i]”上始终收到错误消息“无法将对象键入'System.String'键入'System.Data.DataRowView'”。 ;”请帮帮我

用于填充清单框的代码

public void PopuMinistry()
    {
        SqlConnection conn = new SqlConnection("Data Source=USER-PC;Initial Catalog=PIWCDB;User ID=sa;Password=mike");
        if (conn.State != ConnectionState.Open)
        {
            conn.Open();
        }
        string SqlDataPull = ("select Homecellname from tblministries order by Homecellname");

        SqlCommand cmd = new SqlCommand(SqlDataPull);
        cmd.Connection = conn;
        cmd.CommandType = CommandType.Text;
        SqlDataReader dr = cmd.ExecuteReader();


        while (dr.Read())
        {
            SqlDataPull = dr[0].ToString();
            cblMinistries.Items.Add(SqlDataPull);
        }
        dr.Close();
    }

将清单框项目标记为已选中的代码

public void minsearch()
    {
        SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
        conn.ConnectionString = "Data Source=USER-PC;Initial Catalog=PIWCDB;User ID=sa;Password=mike";
        conn.Open();

        string sqlQuery = "SELECT Ministryname FROM tblMembershipministry WHERE FormattedMembershipid = '" + this.txtMembershipid.Text + "'";
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = sqlQuery;
        cmd.CommandType = System.Data.CommandType.Text;

        try
        {
            System.Data.SqlClient.SqlDataReader dr = null;
            dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                for (int i = 0; i < cblMinistries.Items.Count; i++)
                {
                    DataRowView row = (DataRowView)this.cblMinistries.Items[i];

                    if (row[cblMinistries.ValueMember].ToString() == dr["Ministryname"].ToString())
                    {
                        cblMinistries.SetItemChecked(i, true);
                    }                     
                }
            }

            dr.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
string SqlDataPull = ("select Homecellname from tblministries order by Homecellname");
...
cblMinistries.Items.Add(SqlDataPull);

从而,

DataRowView row = (DataRowView)this.cblMinistries.Items[i] 

正在尝试将字符串转换为DataRowView

也许以下方法会起作用:

string ministryValue = this.cblMinistries.Items[i] ;
if (ministryValue  == dr["Ministryname"].ToString())
                    {
                        cblMinistries.SetItemChecked(i, true);
                    }      

选中的列表框未填充数据行,而是填充了读取器返回的第一列的字符串( Homecellname )。

这意味着,您可以将项目直接转换为字符串,并提供所需的值(您在代码中使用cblMinistries.ValueMember,我假设它引用的是Homecellname)

 string tofind = dr["Ministryname"].ToString();
 for (int i = 0; i < cblMinistries.Items.Count; i++)
 {
      string ministry = (string)this.cblMinistries.Items[i];

      if (ministry  == tofind)
      {
           cblMinistries.SetItemChecked(i, true);
      }                     
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM