Why do you need three loops? You have loops within loops which is creating major problems for you...
DataTable table = new DataTable("MyTable");
DataRow dr;
table.Columns.Add("id", typeof(int));
table.Columns.Add("name", typeof(string));
foreach (DataRow myRow in dset.Tables["Table"].Rows)
{
int CCid;
CCid = (int)myRow["CID"];
string str = String.Format("C{0:0000}", CCid);
string[] names = { str };
dr = table.NewRow();
dr["id"] = j + 1;
dr["name"] = Convert.ToString(names[str[0]]);
table.Rows.Add(dr);
}
ds.Tables.Add(table);
ddlContract.DataSource = ds.Tables["MyTable"];
ddlContract.DataTextField = "name";
ddlContract.DataValueField = "id";
ddlContract.DataBind();
Still it's no way near effecient code!! but for educational purposes it's ok..