C#:help返回数据集并为控件赋值

时间:2010-09-24 10:34:35

标签: c# sql user-controls

我并不习惯C#sharp,但之前使用过VB.NET。

我需要从查询中的数据设置文本字段,下拉列表等的值。要输入数据,我一直在使用类计算机,其方法是saveComputer(),它从用户控件获取值。现在我想要一个使用url& id的编辑页面。使用Computer类中的getComputer(id)并返回要设置为用户控件的值。我不确定使用这种方法来设置控制值。

Edit.aspx.cs

 protected void btnSave_Click(object sender, EventArgs e)
    {
        int id = 3; //will be replaced to GET value
        Computer comp = new Computer();
        //comp.updateComputer(ref id);

    }

我的电脑课程

public getComputer(ref int id)
    {
        DataSet data = new DataSet();
        using (SqlConnection conn = new SqlConnection(
               "Server=JURA;Database=ReadyForSeven;User id=;Password="))
        {
            String sql = "SELECT * FROM computers WHERE id=@id";

            //replace contatenation of variable with parameter name


            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = sql.ToString();
            cmd.CommandType = CommandType.Text;

            //Define SqlParameter object and assign value to the parameter

            cmd.Parameters.Add("@id", SqlDbType.Int);
            cmd.Parameters["@id"].Value = id;

            try
            {
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    da.Fill(data);
                    // return data here
                }
            }
            catch (SqlException ex)
            {
                //send user to error page and log message

            }
        }
    }

所以我想要实现的是使用Computer的getcomputer方法来设置Edit.aspx上控件的值

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

您需要修改getComputer方法以返回DataSet之类的内容:

public DataSet getComputer(int id) {

一旦完成,我们可以调用它并在页面加载上填充表单控件,例如:

protected void Page_Load(object sender, EventArgs e) {
    if (!IsPostBack) {
        int id = 3; // get from querystring
        DataSet ds = getComputer(id);
        DataRow dr = ds.Tables[0].Rows[0]; // get the first row returned

        // populate form controls
        txtFirstName.Text = dr["FirstName"].ToString();
        ddlState.SelectedValue = dr["State"].ToString();
    }
}

以下是getComputer的更新版本,它将始终返回一个值并且更紧凑:

public DataSet getComputer(int id) // you don't need to pass int by ref unless you're planning on changing it inside this method
{
    DataSet data = new DataSet();
    using (SqlConnection conn = new SqlConnection("Server=JURA;Database=ReadyForSeven;User id=;Password=")) {
        using (SqlCommand cmd = new SqlCommand("SELECT * FROM computers WHERE id = @id", conn)) {
            cmd.Parameters.AddWithValue("id", id);
            using (SqlDataAdapter da = new SqlDataAdapter(cmd)) {
                da.Fill(data);
                return data;
            }
        }
    }
}

我不得不删除try / catch博客以确保该方法始终返回一个值。如果你绝对需要try / catch块,你需要在方法结束时返回一个空DataSet来正确编译。